2011-02-09 51 views
3

考慮下面的代碼:的ExecuteReader返回結果,當檢查查詢確實

 StringBuilder textResults = new StringBuilder(); 
     using(SqlConnection connection = new SqlConnection(GetEntityConnectionString())) 
     { 
      connection.Open(); 
      m.Connection = connection; 
      SqlDataReader results = m.ExecuteReader(); 
      while (results.Read()) 
      { 
       textResults.Append(String.Format("{0}", results[0])); 
      } 
     } 

我用活動監視SQL Server管理Studio中的數據庫來檢查正被髮送的精確查詢。然後,我將該查詢文本複製到SSMS中的查詢編輯器窗口,查詢返回了預期的結果。但是,SqlDataReader results始終爲空,表示「該枚舉未返回結果」。

我懷疑是不知何故結果沒有被正確地返回,這讓我覺得上面的代碼有問題,而不是查詢本身傳遞。

有沒有什麼會導致在上面的代碼?或者我忽略了什麼?

編輯:

這裏是通過SqlCommand對象指示的查詢:

SELECT DISTINCT StandardId,Number 
FROM vStandardsAndRequirements 
WHERE StandardId IN ('@param1','@param2','@param3') 
ORDER BY StandardId 

下面是查詢,它出現在活動監視器:

SELECT DISTINCT StandardId,Number 
FROM vStandardsAndRequirements 
WHERE StandardId IN ('ABC-001-0','ABC-001-0.1','ABC-001-0') 
ORDER BY StandardId 

查詢正在反對一個觀點。

當我對數據庫運行第二個查詢時,它返回了3行。

SqlDataReader指示0行。

+0

也許你應該向我們展示查詢和表格的樣子,很難說沒有查詢/ DDL的失敗。上面的代碼是可以的。 – Matten 2011-02-09 01:07:35

+0

謝謝,會做。 – morganpdx 2011-02-09 01:08:34

回答

1

嘗試使用Sqldata適配器而不是sqldatreader。

StringBuilder textResults = new StringBuilder(); 

     using (var conn = new SqlConnection(GetEntityConnectionString()))) 
     { 
      using (
       var cmd = new SqlCommand(
      "SELECT DISTINCT StandardId,Number" + 
       "FROM vStandardsAndRequirements " + 
      "WHERE StandardId IN (@param1,@param2,@param3)" + 
      "ORDER BY StandardIdl" 

     , conn)) 
      { 

       var dSet = new DataSet(); 
       var dt = new Datatable(); 

       var da = new SqlDataAdapter(cmd); 

       cmd.Parameters.Add("@param1", SqlDbType.VarChar, 50).Value = "ABC-001-0"; 
     cmd.Parameters.Add("@param2", SqlDbType.VarChar, 50).Value = "ABC-001-0.1"; 
       cmd.Parameters.Add("@param3", SqlDbType.VarChar, 50).Value = "ABC-001-0"; 
       try 
       { 

        da.Fill(dSet); 

     dt = dSet.Tables[0]; 

     foreach(Datarow a in dt.Rows) 
     { 

      textResults.Append(a["StandardId"].tostring()).AppendLine(); 


     } 

     Messabox.Show(textResults.tostring); 

       } 
       catch (SqlException) 
       { 
        throw; 
       } 

     finally 
       { 
        if (conn.State == ConnectionState.Open) conn.Close(); 
       } 

      } 
     } 

問候。

2

你確定這是

WHERE StandardId IN ('@param1','@param2','@param3') 

,而不是這個?

WHERE StandardId IN (@param1,@param2,@param3) 

參數不應引用,不在SQLCommand對象中。

+0

我試過了,得到了1排。但是,我*應該得到三行。所以我認爲這可能是問題的一部分,但不是全部...... – morganpdx 2011-02-09 01:33:35

0

我觀察

很不錯的表現我要尋找的錯誤代碼:

... dr = command.ExecuteReader() ... If dr.Read Then ... 

,發現 'dr.Read' 工作正常,但... 當我將鼠標懸停在'dr'上時,查找數據,返回值消失!