Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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错误使用parameters.AddWithValue返回参数表示_C#_Mysql - Fatal编程技术网

C#和MySQL错误使用parameters.AddWithValue返回参数表示

C#和MySQL错误使用parameters.AddWithValue返回参数表示,c#,mysql,C#,Mysql,通常我不会在这里提问,因为已经有很多很好的答案可以回答我的问题,但是这次我已经搜索了2个多小时,运气不好,所以我们开始了(顺便说一句,很高兴在这一点上错了,请随时为我指出正确的方向。) 我试图在数据库中进行参数化输入,但我一直在获取占位符参数,而不是指定的动态值 string name = //definitely a string value. string dc = //definitely a string value. string pas

通常我不会在这里提问,因为已经有很多很好的答案可以回答我的问题,但是这次我已经搜索了2个多小时,运气不好,所以我们开始了(顺便说一句,很高兴在这一点上错了,请随时为我指出正确的方向。)

我试图在数据库中进行参数化输入,但我一直在获取占位符参数,而不是指定的动态值

        string name = //definitely a string value.
        string dc = //definitely a string value.
        string password = //definitely a string value (hashed, no plaintext.)
        string passwordDate = //definitely a date value.
        int passwordAge = //definitely a int value.
        string role = //definitely a string value.
        string shift = //definitely a string value.
        string modBy = //definitely a string value.
        string newEmpQuery = "INSERT INTO /*table address*/ (`/*Field1*/`,`/*Field2*/`,`/*Field3*/`,`/*Field4*/`,`/*Field5*/`,`/*Field6*/`,`/*Field7*/`,`/*Field8*/`) VALUES ('@name1','@dc1','@pass1','@pwda1','@pwage1','@role1','@shift1','@mod1') ON DUPLICATE KEY UPDATE `/*Field2*/`='@dc2', `/*Field3*/`='@pass2', `/*Field4*/`='@pwda2', `/*Field5*/`='@pwage2', `/*Field6*/`='@role2', `/*Field7*/`='@shift2', `/*Field8*/`='@mod2';";
        string modEmpQuery = "INSERT INTO /*table address*/ (`/*Field1*/`,`/*Field2*/`,`/*Field6*/`,`/*Field7*/`,`/*Field8*/`) VALUES ('@name','@dc1','@role1','@shift1','@mod1') ON DUPLICATE KEY UPDATE `/*Field2*/`='@dc2', `/*Field6*/`='@role2', `/*Field7*/`='@shift2', `/*Field8*/`='@mod2';";
        if (passwordResetButton.Visible == true && newRadioButton.Checked == false)
        {
            //Build Query
            Program.conn.Open();
            using (MySqlCommand data = new MySqlCommand(modEmpQuery, Program.conn))
            {
                data.Prepare();
                data.Parameters.AddWithValue("@dc1", dc);
                data.Parameters.AddWithValue("@dc2", dc);
                data.Parameters.AddWithValue("@name", name);
                data.Parameters.AddWithValue("@role1", role);
                data.Parameters.AddWithValue("@role2", role);
                data.Parameters.AddWithValue("@shift1", shift);
                data.Parameters.AddWithValue("@shift2", shift);
                data.Parameters.AddWithValue("@mod1", modBy);
                data.Parameters.AddWithValue("@mod2", modBy);

                //attempt Data Submission
                data.ExecuteReader();

                MessageBox.Show("Employee " + name + " successfully modified!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
            Program.conn.Close();
            ClearFields();
        }

这只是一个片段(经过消毒以保护各地无辜的数据库[好吧,也许只是我的]),但这看起来如此混乱的部分原因是我一直在尝试用尽一切可能。我把我的参数指示符从@改为“?”,这是我找到的一篇文章。显然,我也尝试过在重复参数中添加方差。它已经准备好()并且连接是打开的,但是在执行时,我总是得到“@dc”,而不是之后分配的值

我认为您不需要参数周围的
'
,可以尝试删除INSERT stations中参数周围的
'
,因为
要保护任何地方的无辜数据库
只需删除引号
@foo
的意思是“使用名为“foo”的参数中的值-但是
'@foo'
的意思是“使用带有四个字符的文本字符串,@',f',o',o'”非常感谢,这绝对是正确的。我感谢你的帮助。