gpt4 book ai didi

C# MySQL 错误 “Column count doesn' t 第 1 行匹配值计数”

转载 作者:行者123 更新时间:2023-11-29 10:59:20 25 4
gpt4 key购买 nike

 MySqlCommand cmd1 =
new MySqlCommand(
"INSERT INTO quotedetails (name, address, district, date, forto, refto, total) VALUES('" + txttoname.Text + "', '" + txttoaddress.Text.Replace("\r\n", "<br />").ToString() + "', '" + txtdistrict.Text + "' , '" + dateTimePicker1.Value.Date.ToString("yyyy-MM-dd") +"', '" + txtfor.Text + "', '" + txtref.Text + "', '" + txttotal.Text + "')", conn);
{

请问我可以寻求帮助吗?当执行 command1 时,我收到 Column count does not match value count at row 1 的信息。

最佳答案

您永远不应该使用这样的 SQL。它很容易受到 SQL 注入(inject)攻击。当你像你一样使用它时,有人可以从数据库中窃取 secret 信息,甚至删除你的表、数据等。详细信息请阅读SQL Injection on wiki

相反,您应该使用参数化 SQL 查询。这样你就可以免受注入(inject)攻击,而且我相信编写 sql 更实用。

在您的情况下,在其中一个文本框中输入单个 ' 字符将导致您的查询出现异常。要解决这个问题,只需使用参数即可。

对于你的情况,你可以写类似的东西。

string sqlString = @"INSERT INTO quotedetails (
name,
address,
district,
date,
forto,
refto,
total)
VALUES (
@PAR_name,
@PAR_address,
@PAR_district,
@PAR_date,
@PAR_forto,
@PAR_refto,
@PAR_total)";
MySqlCommand cmd1 = new MySqlCommand(sqlString, conn);

cmd1.Parameters.AddWithValue("PAR_name", txttoname.Text);
cmd1.Parameters.AddWithValue("PAR_address", txttoaddress.Text.Replace("\r\n", "<br />"));
cmd1.Parameters.AddWithValue("PAR_district", txtdistrict.Text);
cmd1.Parameters.AddWithValue("PAR_date", dateTimePicker1.Value.Date);
cmd1.Parameters.AddWithValue("PAR_forto", txtfor.Text);
cmd1.Parameters.AddWithValue("PAR_refto", txtref.Text);
cmd1.Parameters.AddWithValue("PAR_total", txttotal.Text);

请注意,我使用前缀PAR_作为我的sql参数,这只是一个约定,您可以使用它或跳过PAR_前缀并不重要,这都是关于命名习惯。

此外;在参数化查询中,您不需要将所有值转换为字符串。您可以将 DateTime 用于日期字段,也可以像以前一样传递 int 变量而不使用 ToString()。

关于C# MySQL 错误 “Column count doesn' t 第 1 行匹配值计数”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42523399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com