2013-07-10 84 views
1

我有一個WebMethod被調用以檢索從SQL Server varchar(max)柱。創建我neccessary的存儲過程,這在Management Studio中工作正常,但是當我運行下面的代碼我得到一個錯誤:檢索VARCHAR(MAX)使用C#SQL Server和存儲過程

Invalid attempt to read when no data is present

代碼:

[WebMethod] 
public static void PopulatePopUp(string arg) 
{ 
    var str = GlobalStatic.ExceptBlanks(arg); 

    SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["Conn"].ConnectionString); 

    SqlDataReader rdr = null; 

    using (conn) 
    { 
     using (SqlCommand cmd = new SqlCommand()) 
     { 
      conn.Open(); 

      cmd.CommandText = "GetMessage_Sel"; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@messageId", SqlDbType.VarChar, -1).Value = str; 
      cmd.Parameters.Add("@RowCount", SqlDbType.Int).Direction = ParameterDirection.Output; 

      cmd.Connection = conn; 

      try 
      { 
       rdr = cmd.ExecuteReader(); 

       if (rdr.HasRows) 
       { 
        string fieldValue = rdr.GetString(0); 
       } 
       else 
       { 
        Console.WriteLine("No rows found."); 
       } 

       rdr.Close(); 
      } 
      catch (Exception err) 
      { 
       // handle the error 
       //messageInsert = false; 
      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 
    } 
} 
+0

你能後的程序是什麼? – DoctorMick

+0

那麼你需要一個'rdr.Read()'調用 – V4Vendetta

回答

2

試試這個

    if (rdr.HasRows) 
        { 
         while(rdr.Read()) 
         { 
          string fieldValue = rdr[0].ToString(); 
         } 

        } 
        else 
        { 
         Console.WriteLine("No rows found."); 
        } 
+0

校園男孩錯誤。多謝你們。改變我的代碼接受閱讀(白癡我)我現在得到一個演員問題。 Int32轉換爲字符串。我的印象是-1在聲明中是用於Varchar(max) – CSharpNewBee

2

根據行你期望你會需要Read方法稱爲將實際獲取你的結果,所以這個條件應該是不錯的,因爲它只會在移動,如果有一排讀出

while(rdr.Read()) 
{...} 

if(rdr.Read()) 
{ ...} 
1

發生這種情況是因爲您沒有閱讀下一條記錄。

變化

if (rdr.HasRows) 
{ 
    string fieldValue = rdr.GetString(0); 
} 

if (rdr.Read()) 
{ 
    string fieldValue = rdr.GetString(0); 
} 
相關問題