ODBCDataReader具有行但无法访问数据

时间:2013-10-21 20:17:12

标签: c# database

所以在C#中,我有一个ODBCDataReader返回它有行,但是当我尝试访问数据时,它返回一个未设置为对象错误引用的对象。我直接在db上测试了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"
    }
 }
}

2 个答案:

答案 0 :(得分:2)

您正在使用块之外使用它。在使用块内(在ExecuteReader()调用之后立即移动使用[results]的部分),你应该在一个更好的地方。

答案 1 :(得分:0)

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

SELECT * FROM MyTable WHERE MyField = @MyField

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

SELECT * FROM MyTable WHERE MyField = ?

然后在C#中绑定参数:

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

旧问题,但这是Google上的第一个结果,尚未得到解答。希望对您有所帮助。