0

所以在 C# 中,我有一个 ODBCDataReader,它返回它有行,但是当我尝试访问数据时,它返回一个未设置为对象引用的对象错误。我直接在数据库上测试了 sql,它确实返回了一行没有任何空值

OdbcDataReader results;
try
{
// Initialize & open odbc connection
using (OdbcConnection conn = new OdbcConnection(connectionString.ToString()))
{
    conn.Open();

    // Initialiaze odbc command object
    using (OdbcCommand comm = new OdbcCommand(query.ToString(), conn))
    {
        results = comm.ExecuteReader();

    } 
} 
} 
catch
{
//detailed error messaging here (which does not get hit)
}

temp = results;

if (temp.HasRows == false)
{
//error messaging here does not get hit.
}
while (temp.Read())
{
    try
    {
        //I attempted to access the data by creating an object array:
        object [] objarray = new object[temp.FieldCount)
        temp.GetValues(objarray); //this causes error
    }
    catch{ // error is caught here "object not set to a reference of an object" }

    for (i = 0; i < temp.FieldCount; i++)
 {
    try
    {
                    //I also attempted other ways to access the data including:
        temp[i].ToString(); // this causes error
        temp.GetInt32(i).ToString(); // this causes error
                    temp.GetName(i); //this causes error
    }
    catch
    {
        // error is caught here "object not set to a reference of an object"
    }
 }
}
4

2 回答 2

2

您在 using 块之外使用它。在 using 块内移动您使用 [results] 的部分(在 ExecuteReader() 调用之后立即),您应该处于一个更好的位置。

于 2013-10-21T20:19:04.460 回答
0

我遇到了同样的问题。我的问题是我没有正确绑定我的参数。我正在使用@

SELECT * FROM MyTable WHERE MyField = @MyField

出于某种原因,这在 MySQL 中是有效的,不会产生错误,但不会返回数据。解决方案是使用绑定?

SELECT * FROM MyTable WHERE MyField = ?

然后在 C# 中绑定参数:

cmd.Parameters.AddWithValue("@MyField", myFieldValue);

老问题,但这是谷歌上的第一个结果,没有答案。希望它有帮助。

于 2019-03-01T17:29:07.943 回答