C#-MySQL选择查询未执行

问题描述 投票:0回答:1

我正在创建的程序将SQL查询作为字符串参数,并将其传递给方法,然后执行该方法。我可以为每个查询打开mysql连接,但是由于某种原因,我无法运行任何选择语句(我已经尝试了ExecuteReaderExecuteScalar)。

但是,当我运行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连接,但是由于某些原因...

c# mysql
1个回答
1
投票
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));
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.