C# MySQL Read must be called first
Есть странная проблема. Вот код:
string[] ret = new string[3];
string SQLTablename = configdata(Config)["SQL"]["UserTable"];
MySqlConnection connect = new MySqlConnection(SQLConnSTR);
connect.Open();
string sqlcmd = String.Format("SELECT * FROM `{0}` WHERE `ID` = {1}", SQLTablename, ID);
MySqlCommand command = new MySqlCommand(sqlcmd, connect);
MySqlDataReader reader = command.ExecuteReader();
reader.Read();
ret[0] = reader["ID"].ToString();
ret[1] = reader["Name"].ToString();
ret[2] = reader["SelectedMember"].ToString();
reader.Close();
connect.Close();
return ret;
Он работает нормально при запуске отладки, но стоит мне собрать проект (проект netcore), то вываливается ошибка
16-12-2020 20:37:15 : Read must be called first.
16-12-2020 20:37:16 : at MySqlConnector.Core.ResultSet.GetCurrentRow() in /_/src/MySqlConnector/Core/ResultSet.cs:line 420
at MySqlConnector.MySqlDataReader.get_Item(String name) in /_/src/MySqlConnector/MySqlDataReader.cs:line 196
at ПУТЬДОФАЙЛА.getuserinfo(String Config, UInt64 ID)
Ошибка появляется при попытке выполнить этот код
ПУТЬДОФАЙЛА это путь до функции. Я просто его скрыл
Ответы (1 шт):
Автор решения: FAR747
→ Ссылка
Ошибка в том, что БД по запросу возвращала null ибо по условию не подходила ни одна запись. Ошибка Read must be called first была из за того, что я пытался прочесть reader в котором ничего не было.
Этого можно избежать добавив проверку if (reader.Read()). В итоге код будет выглядеть так
string[] ret = new string[3];
string SQLTablename = configdata(Config)["SQL"]["UserTable"];
MySqlConnection connect = new MySqlConnection(SQLConnSTR);
connect.Open();
string sqlcmd = String.Format("SELECT * FROM `{0}` WHERE `ID` = {1}", SQLTablename, ID);
MySqlCommand command = new MySqlCommand(sqlcmd, connect);
MySqlDataReader reader = command.ExecuteReader();
if (reader.Read()){
// Получаем данные из reader
ret[0] = reader["ID"].ToString();
ret[1] = reader["Name"].ToString();
ret[2] = reader["SelectedMember"].ToString();
reader.Close();
connect.Close();
return ret;
}
else {
// Если reader оказался пустой
return null;
}