Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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# Can';t在C中向数据库发送正确的值#_C#_Mysql_Decimal - Fatal编程技术网

C# Can';t在C中向数据库发送正确的值#

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,

我有一个C#(WindowsForm)应用程序,我想在数据库中插入值

我在数据库中插入的信息是产品名称、产品类别和成本,以十进制(5,2)表示

但是,当我尝试插入像1,90这样的值时,它只插入1,00。我想说的是,它只在逗号前插入数字,然后在逗号后加两个零

我已尝试使用此代码:

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);