Я пытаюсь прочитать базу данных MySQL из моего проекта C #, используя драйверы MySQL для .net с сайта MySQL.
Хотя я немного исследовал это (в том числе это ), я все еще недоумеваю, почему это происходит. Позже я запустил шип, и я все еще получаю ту же ошибку. (До этого я заполнил базу данных некоторыми значениями по умолчанию.) Вот код всплеска в целом.
class Program {
static void Main (string[] args) {
Console.WriteLine (GetUserAge ("john")); // o/p's -1
}
static int GetUserAge (string username) {
string sql = "select age from users where name=@username";
int val = -1;
try {
using (MySqlConnection cnn = GetConnectionForReading ()) {
cnn.Open ();
MySqlCommand myCommand = new MySqlCommand (sql, cnn);
myCommand.Parameters.AddWithValue ("@username", username);
using (MySqlDataReader reader = myCommand.ExecuteReader ()) {
DataTable dt = new DataTable ();
dt.Load (reader);
if (reader.Read ()) {
val = reader.GetInt32 (0);
}
}
}
} catch (Exception ex) {
Console.WriteLine (ex.Message);
} finally {
}
return val;
}
private static MySqlConnection GetConnectionForReading () {
string conStr = "Data Source=localhost;Database=MyTestDB;User ID=testuser;Password=password";
return new MySqlConnection (conStr);
}
}
Приведенный выше код дает мне исключение: «Недопустимая попытка чтения, когда устройство чтения закрыто».
Позже я изменил условие if следующим образом:
if (reader.HasRows && reader.Read ()) {
val = reader.GetInt32 (0);
}
А теперь o / p равно -1. (Данные находятся в таблице.) Если по какой-то причине результирующий набор имел нулевые строки, читатель не должен был попасть в блок if. Я имею в виду, что весь смысл метода Read () в том, чтобы проверить, есть ли в результирующем наборе какие-либо строки.
Здесь, в конце концов, остроумие ... просто не могу понять, где я иду не так.
Спасибо за вашу помощь! :)