我有一个数据表,示例数据是这样的:
。
我需要添加其他数据:
。
如何在不删除现有数据的情况下将数据从数据表添加到数据库? 这是我的示例代码,但是此代码将所有数据保存在数据表中,这就是它在数据库中创建重复数据的原因。
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();
}
答案 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)