2011-02-09 50 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'上时,查找数据,返回值消失!