【发布时间】:2015-11-29 13:51:20
【问题描述】:
我在基于服务的数据库中创建了一个表来存储销售信息。该表包括列日期、时间、名称、购买、数量、成本(以这种特定方式)。插入表格的代码是
SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\rnawa_000\Documents\Visual Studio 2013\Projects\Random\Random\sales.mdf;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
conn.Open();
cmd.CommandText = "insert into salesTB (Date,Time,Name,Quantity,Cost) values ('"+date.Text+"','"+time.Text+"','"+txtName.Text+"','"+listBox1.Items.Count+"','"+ txtCost.Text+")";
foreach (string item in listBox1.Items)
{
cmd.CommandText = "insert into salesTB (Purchase) values ('" +item.Substring(0,10) + "')";
}
cmd.ExecuteNonQuery();
cmd.Clone();
conn.Close();
date.text 和time.text 标签分别显示日期和时间。它们在表单加载事件中被分配了它们的值。
txtName.text 和 txtCost.text 标签使用构造函数 as 从之前的表单中获取它们的值
public Form2(ListBox.ObjectCollection objectCollection, string name,string total)
{
InitializeComponent();
this.listBox1.Items.AddRange(objectCollection);
txtName.Text = name;
txtCost.Text = total;
}
当我执行此操作时,它给了我一个错误消息“无法将值 NULL 插入到列‘成本’中”。如果我在数据库的成本列中设置了允许空值,那么它会在异常错误中显示任何其他列名。
【问题讨论】:
-
用户可以通过文本字段将代码注入您的数据库。 绑定参数,不要连接 SQL 字符串。其次,您可能尝试将字符串 'NULL' 插入 int/decimal 字段。
-
第一个命令文本永远不会执行,循环期间构建的命令永远不会执行,除了退出循环时的最后一个。
-
此外,每次在初始插入后执行 foreach 循环时,您都会插入一个新行,因此第一个插入和第二组插入之间没有关系。更好的方法是保持数据标准化,并在每个项目中插入所有数据。
-
你也不应该在你的项目中使用源数据库
AttachDbFilename;这将破坏您的源项目,并且在您尝试部署应用程序时将无法正常工作。使用|DataDirectory|。
标签: c# mysql sql-server