2012-01-04 38 views
-1

所以我有一個控件,它具有所有不同的用戶輸入(comboBox,textBox,DatePicker等)。我想要的是每次點擊'Save'或'Save & Close'按鈕時更新數據庫表「收據」。將不同輸入的值添加到同一個數據庫行

對於每個對象,我有一個數據綁定到源。這不會引發任何語法錯誤,但這顯然不意味着它是正確的。這裏是一個例子:

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"); 

公平地說,我googled如何添加數據綁定,以便可能甚至不正確。

對於我的按鈕,我有以下的代碼,沒有工作(我有我的數據庫,我的代碼開放的一個實例,這樣我就可以驗證):

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

「但是我擔心這隻會將空值添加到行的其餘部分,並且每次創建6行。」不能只添加一個if語句或多個語句來檢查任何值是否爲空? – Dessus 2012-01-04 00:34:14

+0

取決於。您的目標是實際將控制*本身*插入到數據庫中(而不是內容)?因爲它看起來就是你想要做的。 – 2012-01-04 00:37:09

+0

我想插入控件的值(comboBox1.SelectedValue等)。數據進入數據庫。 – Phoenix 2012-01-04 00:45:31

回答

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。

+0

saveCommand.Parameters.Add(「@ DateCleared」,SqlDbType.DateTime).value = dateTimePicker1.Value; //您可以將@chris這兩行放入一行以節省空間/打字。 – harag 2012-01-04 14:43:53

相關問題