C# MySQL SELECT INTO变量,获取“在命令执行期间遇到致命错误”
我在这里尝试了许多建议的解决方案,但似乎没有任何办法解决这个问题。我只是在遇到“mdr=command.ExecuteReader;”时不断收到此错误消息线有什么想法吗C# MySQL SELECT INTO变量,获取“在命令执行期间遇到致命错误”,c#,mysql,C#,Mysql,我在这里尝试了许多建议的解决方案,但似乎没有任何办法解决这个问题。我只是在遇到“mdr=command.ExecuteReader;”时不断收到此错误消息线有什么想法吗 try { MySqlConnection connection = new MySqlConnection("SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "P
try
{
MySqlConnection connection = new MySqlConnection("SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";");
MySqlCommand command;
MySqlDataReader mdr;
connection.Open();
string ThePID = tbPID.Text;
string TheRound = tbRound.Text;
string CurrentPage = tbCurrentPage.Text;
// SELECT @myvar:= myvalue
string query = "SELECT ImageURL, ProofingText " +
"INTO @ImageURL, @ProofingText " +
"FROM Rounds " +
"WHERE ProjectID = " + ThePID + " " +
"AND CurrentRound = " + TheRound + " " +
"AND Page = " + CurrentPage + ";";
command = new MySqlCommand(query, connection);
mdr = command.ExecuteReader();
mdr.Read();
rtProofing.Text = mdr.GetString("@PRoofingText");
tbURL.Text = mdr.GetString("@ImageURL");
tbImagePage.Text = Path.GetFileName(tbURL.Text);
PageBox.Image = Image.FromFile(tbURL.Text);
connection.Close();
connection.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
如果使用,您将得到一条有用的异常消息,解释问题:
必须定义参数“@ImageURL”。要将其用作变量,请在连接字符串中设置“Allow User Variables=true”
默认情况下,从.NET执行的MySQL查询不能使用用户定义的变量。您可以通过在连接字符串中添加Allow User Variables=true来放宽此限制
然而,这并不能解决您的根本问题,即这不是从MySQL中选择数据的正确方法
首先,您的查询易受影响;您应该重写它以使用如下参数:
使用var命令=connection.CreateCommand
{
command.CommandText=@选择图像URL,校对文本
从回合
其中ProjectID=@ThePID
和CurrentRound=@TheRound
和Page=@CurrentPage;;
命令。参数。AddWithValue@ThePID,第;
命令。参数。AddWithValue@TheRound,声音;
命令。参数。AddWithValue@CurrentPage,当前页;
然后,您可以在当前代码上稍有变化的情况下检索值。您必须通过列名检索值,列名没有前导@。您还应该通过检查Read的返回值来检查是否检索到了行:
如果mdr.Read
{
rtProofing.Text=mdr.GetStringProofingText;
tbURL.Text=mdr.GetStringImageURL;
}
最后,字符串连接也不是构建连接字符串的正确方法
var builder=new MySqlConnectionStringBuilder
{
服务器=服务器,
数据库=数据库,
UserID=uid,
密码=密码,
};
使用var connection=new MySqlConnectioncsb.ConnectionString;
欢迎使用Stack Overflow。请学习Stack Overflow的工作原理,并阅读如何提高问题的质量。然后,您的问题将包含您的源代码,这些源代码可以由其他人编译和测试。还可以添加您收到的完整错误消息,甚至可能显示完整的堆栈跟踪和错误消息异常本身。是否尝试放置tbURL.Text=mdr。GetString@ImageURL;之前。Text=mdr。GetString@PRoofingText请在问题中包含完整的异常消息和调用堆栈:将数据(尤其是用户输入)粘贴到字符串中是构建SQL的错误方法。NET提供SQL参数已经很长时间了。我也不知道在您的查询中,将字符串插入到两个会话变量中并没有任何意义,请参阅并使用prepared语句