所以我有一个具有所有不同用户输入的控件(comboBox,textBox,DatePicker等)。我想要的是每次“保存”或“保存和放大”时用新行更新数据库表“收据”。点击关闭'按钮。
对于每个对象,我都有一个绑定到源的数据。这并没有抛出任何语法错误,但这显然并不意味着它是正确的。这是一个例子:
this.textBox2.Location = new System.Drawing.Point(73, 150);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(198, 20);
this.textBox2.TabIndex = 15;
this.textBox2.DataBindings.Add("text", ds, "Receipt.Store");
公平地说,我用谷歌搜索了如何添加数据绑定,这甚至可能都不正确。
对于我的按钮,我有以下代码,但是没有用(我的代码打开了我的数据库实例,所以我可以验证):
private void button3_Click(object sender, EventArgs e)
{
SqlCommand saveCommand = new SqlCommand("INSERT INTO Receipt (DateCleared, CategoryID, Amount, Store, DateEntered, HaveReceipt) VALUES (@DateCleared, @CategoryID, @Amount, @Store, @DateEntered, @HaveReceipt)");
saveCommand.Parameters.AddWithValue("@ComboBox", comboBox1.SelectedValue);
saveCommand.Parameters.Add("@Amount", textBox1.Text);
saveCommand.Parameters.Add("@DateCleared", dateTimePicker1);
saveCommand.Parameters.Add("@DateEntered", dateTimePicker2);
saveCommand.Parameters.Add("@Store", textBox2);
saveCommand.Parameters.Add("@HaveReceipt", checkBox1);
this.Dispose();
}
这是正确的方法吗?我在这里尝试做的是每次点击按钮时添加每个值;但是我担心这只会将空值添加到行的其余部分并且每次创建6行。
如果我需要添加代码或信息,请告诉我。提前谢谢!
答案 0 :(得分:1)
现在这是一个黑暗的刺,因为坦率地说,你没有发布足够的信息来充分回答你当前形式的问题。理想情况下,拥有数据库模式会很好,但我想我可以猜出需要的类型。
您将控件(实际的GUI小部件)推入大多数值。这根本不起作用,底层数据库代码不知道如何处理这样的对象。您必须为其提供所期望的数据类型(varchar字段获取字符串,datetime字段获取DateTime对象等)。这可能是更接近的事情:
private void button3_Click(object sender, EventArgs e)
{
SqlCommand saveCommand = new SqlCommand(
"INSERT INTO Receipt (DateCleared, CategoryID, Amount, Store, DateEntered, HaveReceipt) VALUES (@DateCleared, @CategoryID, @Amount, @Store, @DateEntered, @HaveReceipt)");
// Create a parameter, set the database type, and then set the value
saveCommand.Parameters.Add("@DateCleared", SqlDbType.DateTime);
saveCommand.Parameters["@DateCleared"] = dateTimePicker1.Value;
// The same
saveCommand.Parameters.Add("@DateEntered", SqlDbType.DateTime);
saveCommand.Parameters["@DateEntered"] = dateTimePicker2.Value;
// I'm assuming that this is a string. I could be wrong.
saveCommand.Parameters.Add("@ComboBox", SqlDbType.VarChar);
saveCommand.Parameters["@ComboBox"] = (String)comboBox1.SelectedValue;
// I dunno, is this a float? Well now it is.
saveCommand.Parameters.Add("@Amount", SqlDbType.Float);
saveCommand.Parameters["@Amount"] = Convert.ToDouble(textBox1.Text);
// Seems like this should be a bool (hopefully)
saveCommand.Parameters.Add("@HaveReceipt", SqlDbType.Bit);
saveCommand.Parameters["@HaveReceipt"] = checkBox1.Checked);
// I guess this is a string, but who knows
saveCommand.Parameters.Add("@Store", SqlDbType.VarChar);
saveCommand.Parameters["@Store"] = textBox2.Value;
// No idea why this is here
this.Dispose();
}
显然,根据我所做的假设数量,您的里程可能会有所不同。
修改强>
顺便说一句,实际上你必须在构建它时执行SQL。这只是构建SQL。