所以在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"
}
}
}
答案 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上的第一个结果,尚未得到解答。希望对您有所帮助。