C# Can';t在C中向数据库发送正确的值#
我有一个C#(WindowsForm)应用程序,我想在数据库中插入值 我在数据库中插入的信息是产品名称、产品类别和成本,以十进制(5,2)表示 但是,当我尝试插入像1,90这样的值时,它只插入1,00。我想说的是,它只在逗号前插入数字,然后在逗号后加两个零 我已尝试使用此代码:C# Can';t在C中向数据库发送正确的值#,c#,mysql,decimal,C#,Mysql,Decimal,我有一个C#(WindowsForm)应用程序,我想在数据库中插入值 我在数据库中插入的信息是产品名称、产品类别和成本,以十进制(5,2)表示 但是,当我尝试插入像1,90这样的值时,它只插入1,00。我想说的是,它只在逗号前插入数字,然后在逗号后加两个零 我已尝试使用此代码: decimal varcost = costprod.Value; MySqlCommand command_addprod = new MySqlCommand("INSERT INTO products (name,
decimal varcost = costprod.Value;
MySqlCommand command_addprod = new MySqlCommand("INSERT INTO products (name, cost, id_category) VALUES ('" + nameprod.Text + "','" + varcost + "'," + getidcat + ")");
decimal varcost = costprod.Value;
MySqlCommand command_addprod = new MySqlCommand("INSERT INTO products (name, cost, id_category) VALUES ('" + nameprod.Text + "'," + varcost + "," + getidcat + ")");
该代码:
decimal varcost = costprod.Value;
MySqlCommand command_addprod = new MySqlCommand("INSERT INTO products (name, cost, id_category) VALUES ('" + nameprod.Text + "','" + varcost + "'," + getidcat + ")");
decimal varcost = costprod.Value;
MySqlCommand command_addprod = new MySqlCommand("INSERT INTO products (name, cost, id_category) VALUES ('" + nameprod.Text + "'," + varcost + "," + getidcat + ")");
这两个代码的区别在于第一个代码有引号,第二个代码没有引号
对于第一个代码,它给出了我所说的错误。对于第二个代码,它会给我一个错误,比如:“列计数与第1行的值计数不匹配”
欢迎大家帮忙
编辑: 现在我尝试使用不同的代码:
string getidcat = catprod.SelectedItem.ToString();
try
{
decimal varpreco = precoprod.Value;
string varnome = nomeprod.Text;
MySqlConnection mConn = new MySqlConnection("Persist Security Info=False;server = localhost; port=3307; database = startselling; user = root; password ='usbw';");
var sqlCommand = "INSERT INTO produtos (designacao, preco_unitario, id_categoria) VALUES ('@nome', @preco, (select id_categoria FROM categorias WHERE designacao = @categoria)";
//Create mysql command and pass sql query
using (var command = new MySqlCommand(sqlCommand, mConn))
{
command.Parameters.AddWithValue("@nome", varnome);
command.Parameters.AddWithValue("@preco", varpreco);
command.Parameters.AddWithValue("@categoria", getidcat);
mConn.Open();
command.ExecuteNonQuery();
mConn.Close();
}
MessageBox.Show("Succeeded");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
(有些变量是不同的,但不用担心)
我想我知道错误在哪里,但我不知道如何解决它
我认为错误发生在变量“varpreco”上,因为它包含带逗号的值,并且由于这会与sql代码的逗号混淆,因此给出了一个错误
现在,如果我把逗号从变量改为点,它应该可以工作了。问题是我不知道如何使用它
如果有人能帮助我,我将不胜感激。下面的代码是如何为命令添加参数的
MySqlCommand command_addprod = new MySqlCommand("INSERT INTO products (name, cost, id_category) VALUES (@nameprod, @varcost, @getidcat)";
command_addprod.Parameters.AddWithValue("@nameprod", nameprod.text);
command_addprod.Parameters.AddWithValue("@varcost", varcost);
command_addprod.Parameters.AddWithValue("@getidcat", getidcat);
下面的代码是如何为命令添加参数
MySqlCommand command_addprod = new MySqlCommand("INSERT INTO products (name, cost, id_category) VALUES (@nameprod, @varcost, @getidcat)";
command_addprod.Parameters.AddWithValue("@nameprod", nameprod.text);
command_addprod.Parameters.AddWithValue("@varcost", varcost);
command_addprod.Parameters.AddWithValue("@getidcat", getidcat);
参数。阅读它们,使用它们,甚至学会爱它们。他们会在你还不知道什么是SQL注入之前解决你在输入格式方面的所有问题,并阻止SQL注入。哈哈,好吧!我会更多地了解他们,学会如何去爱他们!ThanksIt似乎是数字和小数的逗号分隔符造成了混乱。另外,请确保要存储成本的数据库中的列类型具有最多3个十进制存储配置。我已经注意到问题出现在逗号分隔符中…数据库具有十进制(5,2),因为我只需要2个十进制大小写。。(有些问题不适用于MySQL而不是SQL Server,但有些问题确实适用。)指定参数的实际类型,包括精度。如果将
十进制
作为十进制
传递,则无需对其进行任何字符串操作,在这种情况下,十进制分隔符完全不相关。参数。阅读它们,使用它们,甚至学会爱它们。他们会在你还不知道什么是SQL注入之前解决你在输入格式方面的所有问题,并阻止SQL注入。哈哈,好吧!我会更多地了解他们,学会如何去爱他们!ThanksIt似乎是数字和小数的逗号分隔符造成了混乱。另外,请确保要存储成本的数据库中的列类型具有最多3个十进制存储配置。我已经注意到问题出现在逗号分隔符中…数据库具有十进制(5,2),因为我只需要2个十进制大小写。。(有些问题不适用于MySQL而不是SQL Server,但有些问题确实适用。)指定参数的实际类型,包括精度。如果将十进制
作为十进制
传递,则无需对其进行任何字符串操作,在这种情况下,十进制分隔符是完全不相关的。您可以看到我的问题(我编辑了它),我已经做了这些更改。然而,它仍然不起作用。我认为这与包含“2,80”而不是“2.80”的变量有关,如果您认为它是逗号,请执行以下操作:varpreco.Replace(“,”,”)或varpreco.Replace(“,”,”);好的,我做到了,并且知道为什么,但它并没有替换;string varprecString=precProd.Value.ToString();替换(“,”,“);varpreco=Convert.ToDecimal(varprecString);我已经做了这些修改,你可以看到我的问题(我编辑了它)。然而,它仍然不起作用。我认为这与包含“2,80”而不是“2.80”的变量有关,如果您认为它是逗号,请执行以下操作:varpreco.Replace(“,”,”)或varpreco.Replace(“,”,”);好的,我做到了,并且知道为什么,但它并没有替换;string varprecString=precProd.Value.ToString();替换(“,”,“);varpreco=Convert.ToDecimal(varprecString);