簡體   English   中英

將NextResult功能與datareader一起使用時出錯

[英]Error while using NextResult fuction with datareader

將NextResult功能與datareader一起使用時出錯

無法獲得第二個表結果,並且在第二個NextResult行上顯示錯誤“關閉閱讀器時,無效嘗試調用nextresult”

using (SqlConnection myCon = DBCon)
{
    try
    {
       string Qry =  @"SELECT [OPSProcedure],[OPSInsertedOn],[OPSInsertedBy]
           FROM [Operation] where OPSID =  '" + opId + "';";

       Qry += @"SELECT  LKCPID  FROM dbo.ConcurrentProcedure  where CPOperationID = '" + opId + "';";

       Qry += @"SELECT  IOperaitonID  FROM  dbo.LkupIntraOperativeAdverseEvents   where IOperaitonID = '" + opId + "';";

        myCon.Open();
        SqlCommand myCommand = new SqlCommand(Qry, myCon);
        myCommand.CommandType = CommandType.Text;
        SqlDataReader sqlReader = myCommand.ExecuteReader();
        DataSet dr = new DataSet();
        if (sqlReader.HasRows)
        {
            dt1.Load(sqlReader);
            if(sqlReader.NextResult())
            {
            dt2.Load(sqlReader);
            }
            if (sqlReader.NextResult())
            {
            dt3.Load(sqlReader);
            }

        }
        sqlReader.Close();
   }
   catch (Exception ex)
   {

   }
}

我試過的

我曾嘗試使用以下代碼獲得多個結果

在這種情況下,我將僅使用SqlDataAdapter進行一次調用並填充所有表

using (SqlConnection myCon = DBCon)
{
    try
    {
       string Qry =  @"SELECT [OPSProcedure],[OPSInsertedOn],[OPSInsertedBy]
                       FROM [Operation] where OPSID =  @id;
                       SELECT  LKCPID  FROM dbo.ConcurrentProcedure  
                       where CPOperationID = @id;
                       SELECT IOperaitonID FROM dbo.LkupIntraOperativeAdverseEvents   
                       where IOperaitonID = @id";
        myCon.Open();
        SqlDataAdapter da = new SqlDataAdapter(Qry, myCon);
        da.SelectCommand.Parameter.Add("@id", SqlDbType.NVarChar).Value = opID;
        DataSet ds = new DataSet();
        da.Fill(ds);

        // Test...
        Console.WriteLine(ds.Tables[0].Rows.Count);
        Console.WriteLine(ds.Tables[1].Rows.Count);
        Console.WriteLine(ds.Tables[2].Rows.Count);

還要注意,您永遠不要串聯字符串來構建sql命令。 始終使用參數。

如果sqlReader.IsClosedfalse並且NextResults根據此論壇返回false ,則DataTable.Load關閉sqlReader

因此,代替:

if (sqlReader.NextResult())

您需要使用:

if (!sqlReader.IsClosed && sqlReader.NextResult() && sqlReader.HasRows)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM