ADO.NET ExecuteReader返回无结果

时间:2014-07-16 19:12:22

标签: c# sql sql-server tsql ado.net

我正在更新一些旧的遗留代码,我遇到了问题 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);
            }
        }
    }
}

4 个答案:

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