我正在创建的程序将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;
}
}
我收到的错误消息是来自超时:
System.TimeoutException:连接尝试失败,因为一段时间后连接方未正确响应,或者由于连接的主机未能响应,所以建立的连接失败
System.IO.IOException:无法从传输连接中读取数据:连接尝试失败,因为一段时间后被连接方未正确响应,或者由于连接的主机未能响应而建立的连接失败。
System.Net.Sockets.SocketException:连接尝试失败,因为一段时间后被连接方未正确响应,或者由于连接的主机未能响应而建立的连接失败
[我确定连接字符串在起作用,因为我能够运行mysqlnonQuery
方法,当我将打印语句放入mysqlSelectScalar
方法时,我看到我能够克服连接的打开。] >
我还应指定要从中选择的表只有45条记录,并且我能够从mysql命令行运行相同的选择查询,这些查询大约在0.01秒内完成。
此代码也从我正在研究的一个较旧的项目中重新使用,它使用完全相同的mysqlSelectScalar
方法,并且运行良好。
任何帮助将不胜感激。
我正在创建的程序将SQL查询作为字符串参数,并将其传递给方法,然后执行该方法。我可以为每个查询打开mysql连接,但是由于某些原因...
using System;
using MySql.Data.MySqlClient;
namespace RetrieveCars
{
class Program
{
static void Main(string[] args)
{
string cs = @"server=localhost;userid=dbuser;password=s$cret;database=testdb";
using var con = new MySqlConnection(cs);
con.Open();
string sql = "SELECT * FROM cars";
using var cmd = new MySqlCommand(sql, con);
using MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Console.WriteLine("{0} {1} {2}", rdr.GetInt32(0), rdr.GetString(1),
rdr.GetInt32(2));
}
}
}
}