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);
            }
        }
    }
}

ADO.. NET ExecuteReader不返回结果

可能是你的结果中没有Int32吗?

var id = sqlDataReader.GetInt32(0); // <-- this might not be an Int32

要么尝试:

var id = sqlDataReader.GetValue(0);

或转换为正确的类型(例如BIGINTInt64),不确定没有看到您的数据

试试这个…

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);
            }
        }
    }
}