检查查询时,ExecuteReader不返回任何结果

时间:2011-02-09 01:00:26

标签: sql ado.net

请考虑以下代码:

        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 Mgmt Studio中使用了Activity Monitor来检查正在发送的确切查询。然后我将该查询文本复制到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行。

4 个答案:

答案 0 :(得分:2)

你确定它是

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

而不是这个?

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

不应引用参数,不应引用SQLCommand对象。

答案 1 :(得分:2)

尝试使用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 :(得分:0)

检查您的连接字符串,确保您没有作为用户实例进行连接。

http://msdn.microsoft.com/en-us/library/ms254504.aspx

答案 3 :(得分:0)

我观察到非常好的行为

我在代码中查找错误:

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

发现'dr.Read'工作正常,但...... 当我鼠标悬停在'dr'上,查找数据时,返回值消失了!