繁体   English   中英

如果值存在,则更新,否则在数据库中插入值

[英]If value exists then update, else insert value in database

我有一个问题,如果我的textbox 4个值-ID,房间类型,费率,额外费用; 如果数据库中存在“房间类型”,则进行更新;如果不存在,则插入数据库。

public void existRoomType()
{
    con.Open();
    string typetable = "tblRoomType";
    string existquery = "SELECT*FROM tblRoomType WHERE RoomType = '" + txtRoomType.Text + "'";
    da = new SqlDataAdapter(existquery, con);
    da.Fill(ds, typetable);
    int counter = 0;
    if (counter < ds.Tables[typetable].Rows.Count)
    {
        cmd.Connection = con;
        string edittypequery = "UPDATE tblRoomType SET RoomType = '" + txtRoomType.Text + "', RoomRate = '" + txtRateOfRoom.Text + "', ExtraCharge = '" + txtExtraCharge.Text + "', CancelFee = '" + txtCancelFee.Text + "', MaxOccupant = " + txtMaxOccupants.Text + "" +
            "WHERE TypeID = '" + txtTypeID.Text + "'";
        cmd.CommandText = edittypequery;
        cmd.ExecuteNonQuery();

        MessageBox.Show("Type of Room is added.", "Room Type Management", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    else
    {
        cmd.Connection = con;
        string addtypequery = "INSERT INTO tblRoomType VALUES ('" + txtTypeID.Text + "','" + txtRoomType.Text + "','" + txtRateOfRoom.Text + "','" + txtExtraCharge.Text + "','" + txtCancelFee.Text + "'," + txtMaxOccupants.Text + ")";
        cmd.CommandText = addtypequery;
        cmd.ExecuteNonQuery();

        MessageBox.Show("Type of Room is edited.", "Room Type Management", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    con.Close();
}

如果将条件if语句从counter < ds.Tables[typetable].Rows.Countcounter > ds.Tables[typetable].Rows.Count ,我可以添加值,但不能在数据库中进行编辑/更新。

您正在寻找的是“ UPSERT”语句。 upsert结合了insert和update语句,并将执行相关操作。 它从MS SQL 2003开始提供,但是直到引入MERGE函数的SQL Server 2008才完全成熟。

这是一个代码示例,摘自另一个答案 答案还引用了本文 ,为使用MERGE语句提供了很好的介绍。

MERGE 
   member_topic AS target
USING 
   someOtherTable AS source
ON 
   target.mt_member = source.mt_member 
   AND source.mt_member = 0 
   AND source.mt_topic = 110
WHEN MATCHED THEN 
   UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN 
   INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')
; 

这种方法的好处是只需要一个SQL查询,而您当前的方法需要两个查询。 它还避免了混合语言,这通常有利于可维护性。

您还应该使用参数化查询将变量值传递给SQL。 这将为您提供防止SQL注入的保护。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM