5

我已经搜索了好几个小时,寻找解决这个问题的方法。我正在尝试使用下面的代码和正确的查询从我的数据库中获取信息。我知道这些查询有效,因为我已经在 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;
}
4

2 回答 2

9

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

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

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

return (myCommand.ExecuteScalar() ?? string.Empty).ToString();
//also rename your method appropriately
于 2012-06-18T19:27:58.047 回答
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;
}
于 2018-04-12T15:44:21.880 回答