ADO.. NET ExecuteReader不返回结果
本文关键字:返回 结果 ExecuteReader NET ADO | 更新日期: 2023-09-27 18:13:11
我正在更新一些旧的遗留代码,我遇到了一个问题SqlCommand.ExecuteReader()方法。问题是它没有返回任何值结果。但是,使用SqlDataAdapter.Fill(),我从数据库。我做错了什么?我如何使用数据获得结果读者吗?
var connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString();
using (var sqlConnection = new SqlConnection(connectionString))
{
using (var sqlCommand = new SqlCommand())
{
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandType = CommandType.Text;
sqlCommand.CommandText = "SELECT * FROM MyTable WHERE ID = 1";
sqlConnection.Open();
// This code works.
//var dataTable = new DataTable();
//using (var sqlDataAdapter = new SqlDataAdapter(sqlCommand))
//{
// sqlDataAdapter.Fill(dataTable);
//}
// This code is not working.
using (var sqlDataReader = sqlCommand.ExecuteReader())
{
while (sqlDataReader.Read())
{
// This fails because the data reader has no results.
var id = sqlDataReader.GetInt32(0);
}
}
}
}
可能是你的结果中没有Int32
吗?
var id = sqlDataReader.GetInt32(0); // <-- this might not be an Int32
要么尝试:
var id = sqlDataReader.GetValue(0);
或转换为正确的类型(例如BIGINT
是Int64
),不确定没有看到您的数据
试试这个…
var id = 0;
using (var sqlDataReader = sqlCommand.ExecuteReader())
{
while (sqlDataReader.Read())
{
id = sqlDataReader.GetInt32(sqlDataReader.GetOrdinal("ColName"));
}
}
我已经将变量移到读取器代码之外,否则该变量只能在该范围内访问。我会避免在代码中指定序数,以防有人更改了DB中的列。
另外,在SQL语句中指定列…SELECT ColName FROM ...
和在查询
如果你到达那一行,它就会显示结果
不表示值不为空
你不应该使用SELECT *
它可能有隐式强制转换
的问题尝试Int32
try
{
if(sqlDataReader.IsDBNull(0))
{
// deal with null
}
else
{
Int32 id = sqlDataReader.GetInt32(0);
}
}
catch (SQLexception Ex)
{
Debug.WriteLine(Ex.message);
}
var connectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString();
using (var sqlConnection = new SqlConnection(connectionString))
{
sqlConnection.Open();
string sql = "SELECT * FROM MyTable WHERE ID = 1";
using (var sqlCommand = new SqlCommand(sql, sqlConnection))
{
using (var sqlDataReader = sqlCommand.ExecuteReader())
{
while (sqlDataReader.Read())
{
// This fails because the data reader has no results.
var id = sqlDataReader.GetInt32(0);
}
}
}
}