请考虑以下代码:
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行。
答案 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)
检查您的连接字符串,确保您没有作为用户实例进行连接。
答案 3 :(得分:0)
我观察到非常好的行为
我在代码中查找错误:
... dr = command.ExecuteReader() ... If dr.Read Then ...
发现'dr.Read'工作正常,但...... 当我鼠标悬停在'dr'上,查找数据时,返回值消失了!