C# 为什么DataReader会给出;枚举未产生任何结果;?
我使用的是一个非常简单的存储过程,它有两个参数。然后它会填充一个DataReader,但是当我运行代码时,DataReader抛出一个错误,说“枚举未产生任何结果”,尽管它通过了reader.Read()行 我的函数作为参数传递给email。然后建立连接:C# 为什么DataReader会给出;枚举未产生任何结果;?,c#,sql,sql-server,C#,Sql,Sql Server,我使用的是一个非常简单的存储过程,它有两个参数。然后它会填充一个DataReader,但是当我运行代码时,DataReader抛出一个错误,说“枚举未产生任何结果”,尽管它通过了reader.Read()行 我的函数作为参数传递给email。然后建立连接: SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["IdesignTriviaConnectio
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["IdesignTriviaConnection"].ConnectionString);
SqlCommand cmd = new SqlCommand("usp_GetCurrentLink", con);
SqlDataReader reader;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@date", SqlDbType.DateTime, 100).Value = DateTime.Today;
cmd.Parameters.Add("@email", SqlDbType.VarChar, 100).Value = email;
之后,它打开连接并建立读卡器:
try
{
if (cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
reader = cmd.ExecuteReader();
while (reader.Read())
{
long LinkID = reader.GetInt32(0);
String URL = reader.GetString(1);
long Completed = reader.GetInt32(2);
if (LinkID == 0)
{
link = "0";
}
else
{
if (Completed == 1)
{
link = "1";
}
else
{
link = URL;
}
}
}
如上所述,存储过程在query analyzer中运行良好,我甚至使用了调试器来查看它是否实际返回了以下预期值:
那么我在这里哪里出了问题?为什么,如果datareader无法枚举任何数据,它会使其通过reader.Read()行吗?如果我这样选择,为什么我能够在调试器中看到这些数据?因此,答案是从日期参数中删除长度。这就是我在复制和粘贴时没有注意到的问题。即使返回数据,显然datareader认为没有数据。感谢那些建议修复的人 我把列名拼错了,所以犯了这个错误。我从
string stn_nm = _rdr["STN_NAME"].ToString();
到
那么,不要再犯那个错误了
因此,首先最容易检查的是,列的所有拼写。祝你好运 在
reader
上的调试器中是否有手表,或者可以在代码之外枚举读取器的东西?是否可以显示更多代码,最后一行long Completed=reader.GetInt32(2)之后是否有任何内容代码>?我们需要看到整个while
循环。此外,您没有使用
块将读卡器放入,也没有使用SqlConnection
,如果在代码正常工作后使用
块将这两个代码放入中,这将导致性能问题。哪一行引发异常?错误来自代码还是调试器?进程返回多少个结果集?程序是否使用设置NOCOUNT ON
?
string stn_nm = _rdr["STATION_NAME"].ToString(); //correct