调用read()之前访问字段的尝试无效

时间:2012-06-18 19:23:59

标签: c# mysql database

我现在已经搜索了好几个小时,正在寻找解决这个问题的方法。我正在尝试使用以下代码从正确的查询中获取数据库中的信息。我知道这些查询有效,因为我已在MySQL工作台中测试过它们。我一直收到错误:

  

在调用read()

之前无效尝试访问字段

正如您将看到的,我确实称之为read(),而我的研究只是没有使用正确的数据库,我已经验证它已经是正确的。有关为什么我收到此错误的任何想法?在此先感谢您的帮助。

public static string ExecuteSelect(string query)
{
    //Example query is: SELECT entity_id FROM catalog_product_flat_1 WHERE sku='itemSku';
    string statement = "";

    MySqlCommand myCommand = new MySqlCommand(query, _conn);

    MySqlDataReader myReader;
    myReader = myCommand.ExecuteReader();
    myReader.Read();

    statement = myReader.GetString(0);
    myReader.Close();

    return statement;
}

2 个答案:

答案 0 :(得分:9)

不确定这是否是您的问题,但您应该始终检查Read()的结果。例如

if (myReader.Read())
{
  statement = myReader.GetString(0);
}

编辑:您实际上在做的是检索标量,因此您可以使用ExecuteScalar()

return (myCommand.ExecuteScalar() ?? string.Empty).ToString();
//also rename your method appropriately

答案 1 :(得分:0)

我刚刚离开了与你类似的问题。我的解决方案是使用

if (!myReader.HasRows)
                {

                }

在浏览数据集之前。

while(myRead.Read()
{
 //read tuples
}

这对您的代码意味着:

public static string ExecuteSelect(string query)
{
//Example query is: SELECT entity_id FROM catalog_product_flat_1 WHERE 
sku='itemSku';
string statement = "";

MySqlCommand myCommand = new MySqlCommand(query, _conn);

MySqlDataReader myReader;
myReader = myCommand.ExecuteReader();
myReader.Read();
if(!myReader.HasRows)
{
 //set your statement variable to some generic value
 statement="abracadabra";
}

while(myReader.Read())
{
statement = myReader[0].ToString();
}
myReader.Close();

return statement;
}