Программа, которую я создавал, принимает запрос SQL в качестве строкового параметра и передает его методу, где он затем выполняется. Я могу открыть свое mysql соединение для каждого запроса, но по какой-то причине я не могу выполнить какие-либо операторы выбора (я пробовал и ExecuteReader
, и ExecuteScalar
).
Однако, когда я запускаю ExecuteNonQuery
, он работает нормально. Я могу проверить, что оператор вставки работал с ExecuteNonQuery
.
В настоящее время у меня есть та же база данных в SQLyog, использующая точно такую же информацию о соединении. Пока выполняется оператор select, я одновременно выполняю «SHOW FULL PROCESSLIST» и не вижу, как выполняется запрос. Вот код, который у меня есть:
private void buttonConnect_Click(object sender, EventArgs e)
{
string tmp = mysqlSelectScalar("select NAME from PRESIDENTS where name like '%trump%';");
string tmp = mysqlSelectScalar("select COUNT(*) from project.PRESIDENTS;");
mysqlnonQuery("insert into PRESIDENTS (ID,NAME) VALUES ('66','TEST');");
}
public string mysqlSelectScalar(string query)
{
string connString = "server=" + textBoxHostname.Text + ";user=" + textBoxUsername.Text + "; password=" + textBoxPW.Text + ";port=" + textBoxPort.Text + ";database=" + textBoxDB.Text + ";RespectBinaryFlags = false;CharSet=utf8;";
MySqlConnection cnn = new MySqlConnection(connString);
string result = "";
try
{
MessageBox.Show(query);
MySqlCommand cmd = new MySqlCommand(query, cnn);
using (cnn)
{
cnn.Open();
cmd.CommandTimeout = 10;
result = Convert.ToString(cmd.ExecuteScalar());
}
cnn.Close();
}
catch (Exception ex)
{
MessageBox.Show("COULD NOT CONNECT TO DATABASE: " + ex.ToString());
}
return result;
}
public void mysqlnonQuery(string query)
{
string connString = "server=" + textBoxHostname.Text + ";user=" + textBoxUsername.Text + "; password=" + textBoxPW.Text + ";port=" + textBoxPort.Text + ";database=" + textBoxDB.Text + ";RespectBinaryFlags = false;CharSet=utf8;";
MySqlConnection cnn = new MySqlConnection(connString);
string result = "";
try
{
MessageBox.Show(query);
MySqlCommand cmd = new MySqlCommand(query, cnn);
using (cnn)
{
cnn.Open();
cmd.ExecuteNonQuery();
}
cnn.Close();
connStatus = 0;
}
catch (Exception ex)
{
MessageBox.Show("COULD NOT CONNECT TO DATABASE: " + ex.ToString());
connStatus = 1;
}
}
private void outputTable(string query)
{
try
{
string connString = "server=" + textBoxHostname.Text + ";user=" + textBoxUsername.Text + "; password=" + textBoxPW.Text + ";port=" + textBoxPort.Text + ";database=" + textBoxDB.Text + ";RespectBinaryFlags = false;CharSet=utf8;";
MySqlConnection conn = new MySqlConnection(connString);
MySqlCommand cmd = new MySqlCommand(query, conn);
MySqlDataAdapter adpt = new MySqlDataAdapter();
conn.Open();
cmd.CommandTimeout = 5;
MySqlDataAdapter sqladapter = new MySqlDataAdapter(query, conn);
DataSet DS = new DataSet();
sqladapter.Fill(DS);
//the above command is what times out. Everything before runs fine
dataGridViewOutput.DataSource = DS.Tables[0];
MessageBox.Show("dataGridViewOutput.DataSource = DS.Tables[0];");
conn.Clone();
}
catch (Exception ex)
{
richTextBoxOutput.Text = ex.ToString();
}
}
Я получаю сообщение об ошибке от тайм-аута:
System.TimeoutException : A Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить установленное соединение, поскольку подключенный хост не смог ответить
System.IO.IOException : невозможно прочитать данные из транспортного соединения: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, так как подключенный хост не смог ответить.
System. Net. Sockets.SocketException : Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, так как подключенный хост не смог ответить
Я уверен, что Строка подключения работает, потому что я могу запустить метод mysqlnonQuery
, и когда я положил печать операторы в методе mysqlSelectScalar
, которые я видел, я смог пройти после открытия соединения.
Я должен также указать, что в таблице, из которой я выбираю, всего 45 записей, и я могу запустить те же самые запросы выбора из командной строки mysql, которые выполняются примерно за 0,01 секунды.
Этот код также переназначен из более старого проекта, над которым я работал, с точно таким же методом mysqlSelectScalar
, и работал отлично.
Любая помощь будет принята с благодарностью.