【发布时间】:2019-09-12 08:53:27
【问题描述】:
我有一个类函数,我试图使用 SqlDataReader 从数据库表中读取数据。当调用 SqlCmd.ExecuteReader() 时,我看到(在调试时)SqlDataReader 的 resultView 显示“枚举没有产生任何结果”。但是,SqlDataReader.Read() 仍然返回 true,因此进入 while() 代码块。
查询在 SQL 上正确执行,甚至更改查询以从其他表中获取数据也会得到相同的结果。请注意,我在一个单独的类中有几个其他函数,它们执行类似的代码以从这些相同的数据库表中获取数据,并且它们可以正常工作。
另一个观察是,在调用 ExecuteReader() 之后,SQLDataReader 的 VisibleFieldCount 字段的值 = 11,等于 Customer 表中的总列数。这表明读者能够从数据库中读取至少一些数据。
任何建议或帮助将不胜感激。如果需要更多信息,请告诉我。
为了便于调试,我已经尝试通过删除除数据检索部分之外的任何代码逻辑来尽可能简化功能代码。
public bool MatchPassword(string username, string enteredPassword)
{
bool loginSuccessful = false;
string returnedpasswordbinary;
DatabaseConnection databaseConnectionObj = new DatabaseConnection();
databaseConnectionObj.CreateDBConnection(); //Sets the connection string and opens database connection
string query = "SELECT * FROM dbo.Customers WHERE CustomerID='ALFKI';";
SqlCommand sqlCommandObj = new SqlCommand();
sqlCommandObj.CommandText = query;
sqlCommandObj.Connection = databaseConnectionObj.SqlConnectionObj1;
try
{
SqlDataReader sqlDataReaderObj = sqlCommandObj.ExecuteReader();
if (sqlDataReaderObj.HasRows)
{
while (sqlDataReaderObj.Read())
{
returnedPasswordBinary = sqlDataReaderObj[0].ToString();
}
}
}
catch (Exception ex)
{
throw ex;
}
return loginSuccessful;
}
【问题讨论】:
-
您是否尝试过不使用 where 条件?前 10 个喜欢
-
@cdev 我有,即使使用最简单的查询“SELECT * FROM dbo.Customers;”,它仍然显示相同的行为。
-
它是否适用于其他表格?我不清楚你的问题中的这一点
-
@cdev 对其他表也表现出相同的行为。尽管在 SQL Server 本身上执行相同的查询会返回预期的数据而没有任何问题。
-
到底是什么问题?您期望什么行为以及实际发生什么?请记住,枚举数据读取器会更改数据读取器,因此您不应该在调试器中这样做 - 您正在丢弃数据。
标签: c# sqldatareader