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

mor*_*pdx 6 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]));
            }
        }
Run Code Online (Sandbox Code Playgroud)

我在数据库上的 Sql Server Mgmt Studio 中使用活动监视器来检查正在发送的确切查询。然后我将该查询文本复制到 SSMS 中的查询编辑器窗口,查询返回了预期的结果。但是,SqlDataReader results始终为空,表示“枚举没有返回结果”。

我的怀疑是以某种方式没有正确返回结果,这让我认为上面的代码有问题,而不是查询本身被传递。

在上面的代码中有什么会导致这种情况吗?还是我忽略了什么?

编辑:

这是 SQLCommand 对象指示的查询:

SELECT DISTINCT StandardId,Number 
FROM vStandardsAndRequirements 
WHERE StandardId IN ('@param1','@param2','@param3') 
ORDER BY StandardId
Run Code Online (Sandbox Code Playgroud)

这是出现在活动监视器中的查询:

SELECT DISTINCT StandardId,Number 
FROM vStandardsAndRequirements 
WHERE StandardId IN ('ABC-001-0','ABC-001-0.1','ABC-001-0') 
ORDER BY StandardId
Run Code Online (Sandbox Code Playgroud)

该查询针对单个视图工作。

当我对数据库运行第二个查询时,它返回了 3 行。

SqlDataReader 指示 0 行。

Cri*_*and 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();
                }

            }
        }
Run Code Online (Sandbox Code Playgroud)

问候。