我正在更新一些旧的遗留代码,我遇到了问题 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);
}
}
}
}
答案 0 :(得分:1)
可能是您的搜索结果中没有Int32
吗?
var id = sqlDataReader.GetInt32(0); // <-- this might not be an Int32
尝试:
var id = sqlDataReader.GetValue(0);
或投射到正确的类型(BIGINT
,例如Int64
),不确定没有看到您的数据。
答案 1 :(得分:0)
如果你到那条线那么它就有结果
并不意味着价值不为空
而且你不应该使用SELECT *
如果隐式演员可能有问题
试试Int32
try
{
if(sqlDataReader.IsDBNull(0))
{
// deal with null
}
else
{
Int32 id = sqlDataReader.GetInt32(0);
}
}
catch (SQLexception Ex)
{
Debug.WriteLine(Ex.message);
}
答案 2 :(得分:0)
试试这个..
var id = 0;
using (var sqlDataReader = sqlCommand.ExecuteReader())
{
while (sqlDataReader.Read())
{
id = sqlDataReader.GetInt32(sqlDataReader.GetOrdinal("ColName"));
}
}
我已将变量移到读者代码之外,或者变量只能在该范围内访问。我会避免在代码中指定序号,以防有人更改数据库中的列。
此外,请在 SQL 语句中指定列... SELECT ColName FROM ...
并在查询中使用params
答案 3 :(得分:-2)
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);
}
}
}
}