2015-12-13 76 views
0

我使用SQL Server 2012 & VS 2013年動態SQL INSERT查詢我有這樣建設有Where子句C#

[dbo].[Accounts] ([AccntName], [AccntCrVal], [AccntDrVal]) 

我想建立視病情動態SQL查詢表模式。用戶將選擇AccoutnName並輸入餘額,然後選擇餘額類型Credit或Debit。現在我想要如果用戶選擇信用值進入信用欄,反之亦然。用戶將只選擇已在帳戶表中輸入的帳戶名稱。 目前,我這樣做是這樣

using (SqlConnection conn = new SqlConnection(conStr)) 
{ 
    insrtcmd = new SqlCommand(); 
    insrtcmd.Connection = conn; 
    if (comBoxBalType.Text == "Cr") 
    { 
     insrtcmd.CommandText = @"INSERT INTO Accoutns(AccntCrVal) VALUES (@bal) Where([email protected])"; 
     insrtcmd.Connection = conn; 
     insrtcmd.Parameters.AddWithValue("@acntName", acntName); 
     insrtcmd.Parameters.AddWithValue("@bal", bal); 
     conn.Open(); 
     insrtcmd.ExecuteNonQuery(); 
    } 
    else if (comBoxBalType.Text == "Dr") 
    { 
     insrtcmd.CommandText = @"INSERT INTO Accoutns(AccntDrVal) VALUES (@AccntDrVal) Where ([email protected])"; 
     insrtcmd.Connection = conn; 
     insrtcmd.Parameters.AddWithValue("@prmSlctAcntName", comBoxSlctAcnt.Text); 
     insrtcmd.Parameters.AddWithValue("@AccntDrVal", textBoxBal); 
     conn.Open(); 
     insrtcmd.ExecuteNonQuery(); 
    } 
    else 
    { 
     MessageBox.Show("Please Enter Values and Select the Balance Type [ Dr | Cr ] ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

但我不希望做這樣的。謝謝

+0

是的。你能提供代碼嗎? @ 0 _______ 0 – Hanni

+0

您無法定義動態插入語句。 – Jack

+0

任何其他方式做到這一點? @Jack – Hanni

回答

3

由於您已經是表中的數據,您需要Update的記錄。根據您目前的設置,你可以做這樣的事情

using (SqlConnection conn = new SqlConnection(conStr)) 
{ 
    var accountName = comBoxSlctAcnt.Text; 
    var balance = textBoxBal.Text; 
    var balanceType = comBoxBalType.Text; 

    if (balanceType == "Cr" || balanceType == "Dr") 
    { 
     insrtcmd = new SqlCommand(); 
     insrtcmd.CommandText = string.Format(
            @"UPDATE Accoutns SET {0} = @bal Where AccntName = @acntName", 
            balanceType == "Cr" ? "AccntCrVal" : "AccntDrVal"); 
     insrtcmd.Connection = conn; 
     insrtcmd.Parameters.AddWithValue("@acntName", accountName); 
     insrtcmd.Parameters.AddWithValue("@bal", balance); 
     conn.Open(); 
     insrtcmd.ExecuteNonQuery(); 
    } 
    else 
    { 
     MessageBox.Show("Please Enter Values and Select the Balance Type [ Dr | Cr ] ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

不過,你倒是應該使用CheckBoxDropDown選擇交易類型,並使用它們之前驗證所有的值。抓住例外,如果有的話。或者,您可以編寫一個小型存儲過程,並將條件邏輯從C#移至SQL

+0

謝謝。 @Arghya C – Hanni

+1

如果它解決了你的問題。你可以標記爲答案。 – Jack