将数据表中的非现有数据添加到数据库而不删除现有数据

时间:2016-10-14 05:18:29

标签: c# sql

我有一个数据表,示例数据是这样的:
enter image description here

我需要添加其他数据:

enter image description here

如何在不删除现有数据的情况下将数据从数据表添加到数据库? 这是我的示例代码,但是此代码将所有数据保存在数据表中,这就是它在数据库中创建重复数据的原因。

if (dtEmailAddress.Rows.Count>0)
        {
            string strDBConfig = Application.StartupPath + @"\MedXPro.xml";
            string sql = "INSERT INTO AgencyEmailAddress (AgencyID, EmailAddress) VALUES (@AgencyID, @EmailAddress)";
            using (SqlConnection conn = PSCSClass.DataConnections.MDFConnection("", "", false, "", "", strDBConfig))
            {
                foreach (DataRow row in dtEmailAddress.Rows)
                {
                    SqlCommand cmd = conn.CreateCommand();
                    cmd.CommandText = sql;
                    cmd.Parameters.AddWithValue("@AgencyID", row["AgencyID"]);
                    cmd.Parameters.AddWithValue("@EmailAddress", row["EmailAddress"]);
                    cmd.ExecuteNonQuery();
                }
            }
            dtEmailAddress.Rows.Clear();
        }

2 个答案:

答案 0 :(得分:1)

基本思想是检查是否存在,并在单个SQL语句中更新或创建。就像这样:

BEGIN TRANSACTION;
UPDATE dbo.AgencyEmailAddress SET EmailAddress WHERE AgencyID = @agencyId;
IF @@ROWCOUNT = 0
BEGIN
  INSERT dbo.AgencyEmailAddress(AgencyID, EmailAddress) 
      SELECT @agencyId, @emailAddress;
END
COMMIT TRANSACTION;

由于从C#代码执行此操作可能非常不方便,我将创建一个过程UpdateAgency并从C#调用它。

答案 1 :(得分:0)

我在重新阅读问题后更新了我的回答 对不起,我误解了最初的问题

您可以在同一个查询中检查数据是否存在,如下所示:

IF NOT EXISTS (SELECT * FROM AgencyEmailAddress WHERE EmailAddress = @EmailAddress)

    INSERT INTO AgencyEmailAddress (AgencyID, EmailAddress) VALUES (@AgencyID, @EmailAddress)