Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL SELECT INTO变量,获取“在命令执行期间遇到致命错误”_C#_Mysql - Fatal编程技术网

C# MySQL SELECT INTO变量,获取“在命令执行期间遇到致命错误”

C# MySQL SELECT INTO变量,获取“在命令执行期间遇到致命错误”,c#,mysql,C#,Mysql,我在这里尝试了许多建议的解决方案,但似乎没有任何办法解决这个问题。我只是在遇到“mdr=command.ExecuteReader;”时不断收到此错误消息线有什么想法吗 try { MySqlConnection connection = new MySqlConnection("SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "P

我在这里尝试了许多建议的解决方案,但似乎没有任何办法解决这个问题。我只是在遇到“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);

            }
如果使用,您将得到一条有用的异常消息,解释问题:

必须定义参数“@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语句