我有GridView,我试图从表中检查Task_ID
,如果找到,那么我想更新记录但如果在表中找不到Task_ID
那么我想插入它进入我的桌子。我的代码现在执行插入部分,但它不执行代码的更新部分。我想知道如何在相同的代码中执行此操作。请帮忙。谢谢
这是我的代码:
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++;
}
答案 0 :(得分: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);
将“您的新值”更改为正确的更新语句
答案 1 :(得分: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
答案 2 :(得分:0)
我首先查询数据库以查看task_id是否存在...声明cmd,使用sql命令定义它,例如“从myTable中选择count(*),其中Task_ID ='”& Task_ID.text& “'”并将其分配给某个变量x。然后使用“if x<> 0然后 - >将此cmd定义为插入语句,ELSE - >将cmd定义为”更新myTable set blah blah = values WHERE task_ID =“& task_ID。文本。