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