2014-02-13 59 views
3

我有GridView,我試圖從表中檢查Task_ID,如果它被發現然後我想更新記錄,但如果Task_ID沒有在表中找到,那麼我想將它插入我的桌子。我的代碼現在執行插入部分,但它不執行代碼的更新部分。我想知道如何在相同的代碼中執行此操作。請幫忙。感謝 這裏是我的代碼:如何使用插入和更新命令使用c#

int index = 0; 
foreach (GridViewRow row in myGV.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 

     Label ID = row.FindControl("lbl_ID") as Label; 

     string UID = Request.Form[row.FindControl("hfUId").UniqueID]; 

     DateTime strDate = DateTime.Now; 
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["myCon"].ConnectionString); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "insert into myTable(TID, USR_ID, UPDT_DT) values(@ID, @USR_ID, @UPDT_DT) "; 

     cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text; 
     cmd.Parameters.Add("@USR_ID", SqlDbType.VarChar).Value = UID.ToString(); 
     cmd.Parameters.Add("@UPDT_DT", SqlDbType.VarChar).Value = strDate.Date; 
     cmd.Connection = con; 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 
     con.Dispose(); 
     cmd.Dispose(); 
    } 

    index++; 
} 

回答

1

如下替換命令文本:

if not exists (select task_id from mytable where task_id = @task_id) 
insert into myTable(TASK_ID, USR_ID, UPDT_DT) values(@TASK_ID, @USR_ID, @UPDT_DT) 
else 
update mytable set USR_ID = @USR_ID, UPDT_DT = @UPDT_DT where task_id = @TASK_ID 
0

我會先查詢數據庫,查看是否存在TASK_ID ...申報CMD,包含「從myTable的SELECT COUNT(*)SQL命令定義它,其中TASK_ID = '「& Task_ID.text &」'「並將其分配給某個變量x。然後按照「if x <> 0」 - >將cmd定義爲插入語句,ELSE - >將cmd定義爲「更新myTable set blah blah = values WHERE task_ID =」& task_ID.text。

3

在SQL用於此目的的MERGE命令,下面是可能會爲你工作的例子:

Merge myTable As T 
    Using (Select Task_ID From myTable) As Src (Src_ID) 
    ON (T.Task_ID = Src.Src_ID) 
    WHEN MATCHED THEN 
     UPDATE SET T.UPDT_DT = 'your new value' 
    WHEN NOT MATCHED THEN 
     INSERT (TASK_ID, USR_ID, UPDT_DT) 
     VALUES (@TASK_ID, @USR_ID, @UPDT_DT); 

變「新價值」爲正確的更新語句

相關問題