将不同输入的值添加到同一数据库行

时间:2012-01-04 00:24:55

标签: c# sql-server

所以我有一个具有所有不同用户输入的控件(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行。

如果我需要添加代码或信息,请告诉我。提前谢谢!

1 个答案:

答案 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。