我在基于服务的数据库中创建了一个表来存储销售信息。该表包括列日期,时间,名称,购买,数量,成本(以此特定方式)。插入表格的代码是
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
标签使用构造函数
public Form2(ListBox.ObjectCollection objectCollection, string name,string total)
{
InitializeComponent();
this.listBox1.Items.AddRange(objectCollection);
txtName.Text = name;
txtCost.Text = total;
}
当我执行此操作时,它会给我一个错误说"无法将值NULL插入列' Cost'"。如果我在数据库的成本列中设置allow nulls,那么它会在异常错误中显示任何其他列名。
答案 0 :(得分:0)
您需要使用参数化查询来避免错误,因为您要重新连接显式字符串值。您的逻辑也是错误的,这样做会导致非规范化数据,这对任何数据库管理员来说都是可怕的。我会考虑使用它来代替:
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();
foreach (string item in listBox1.Items)
{
cmd.CommandText = "insert into salesTB (Date,Time,Name,Quantity,Cost,Purchase) values (@date, @time, @name, @quantity, @cost, @purchase)";
cmd.Parameters.Add(new SqlParameter("date", date.Text));
cmd.Parameters.Add(new SqlParameter("time", time.Text));
cmd.Parameters.Add(new SqlParameter("name", txtName.Text));
cmd.Parameters.Add(new SqlParameter("quantity", listBox1.Items.Count));
cmd.Parameters.Add(new SqlParameter("cost", txtCost.Text));
cmd.Parameters.Add(new SqlParameter("purchase", item.Substring(0,10)));
cmd.ExecuteNonQuery();
cmd.Clone();
}
conn.Close();
它没有经过测试,但你明白了。
答案 1 :(得分:0)
这是一个更好,更安全的方式来做你的事后:
string SQLQuery = "INSERT INTO salesTB (Date,Time,Name,Quantity,Cost)" +
"VALUES (@date, @time, @name, @quantity, @cost)";
using (SqlConnection DBConn = new SqlConnection(cs.ToString()))
{
using (SqlCommand sqlCmd = new SqlCommand(SQLQuery, DBConn))
{
sqlCmd.Parameters.Add("@date", SqlDbType.Text);
sqlCmd.Parameters["@date"].Value = date.Text;
sqlCmd.Parameters.Add("@time", SqlDbType.Text);
sqlCmd.Parameters["@time"].Value = time.Text;
sqlCmd.Parameters.Add("@name", SqlDbType.Text);
sqlCmd.Parameters["@name"].Value = txtName.Text;
sqlCmd.Parameters.Add("@quantity", SqlDbType.Int);
sqlCmd.Parameters["@quantity"].Value = listBox1.Items.Count;
sqlCmd.Parameters.Add("@cost", SqlDbType.Text);
sqlCmd.Parameters["@cost"].Value = txtCost.Text
DBConn.Open();
sqlCmd.ExecuteNonQuery();
DBConn.Close();
}
}