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