[英]MySQL SELECT INTO Variable, Getting 'Fatal Error encountered during command execution.'
我从这里尝试了许多建议的解决方案,但似乎没有解决这个问题。 我只是在遇到“mdr = command.ExecuteReader();”时不断收到此错误消息线。 请问有什么想法吗?
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);
}
如果您使用MySqlConnector ,您将收到解释问题的有用异常消息:
必须定义参数“@ImageURL”。 要将其用作变量,请在连接字符串中设置“Allow User Variables=true”。
默认情况下,MySQL 查询(从 .NET 执行)不能使用用户定义的变量。 您可以通过向连接字符串添加Allow User Variables=true
来放宽此限制。
但是,这不会解决您的潜在问题,即这不是从 MySQL 中选择数据的正确方法。
首先,您的查询容易受到SQL 注入的影响; 您应该将其重写为使用参数,如下所示:
using (var command = connection.CreateCommand())
{
command.CommandText = @"SELECT ImageURL, ProofingText
FROM Rounds
WHERE ProjectID = @ThePID
AND CurrentRound = @TheRound
AND Page = @CurrentPage;";
commands.Parameters.AddWithValue("@ThePID", ThePID);
commands.Parameters.AddWithValue("@TheRound", TheRound);
commands.Parameters.AddWithValue("@CurrentPage", CurrentPage);
然后,您可以检索对当前代码稍有变化的值。 您必须按列名检索值,列名没有前导@
。 您还应该通过检查Read()
的返回值来检查是否检索到了一行:
if (mdr.Read())
{
rtProofing.Text = mdr.GetString("ProofingText");
tbURL.Text = mdr.GetString("ImageURL");
}
最后,字符串连接也不是构建连接字符串的正确方法。 MySqlConnectionStringBuilder
类就是为此目的而存在的; 用它。
var builder = new MySqlConnectionStringBuilder
{
Server = server,
Database = database,
UserID = uid,
Password = password,
};
using var connection = new MySqlConnection(csb.ConnectionString);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.