我有一个 SQL 命令,它将数据插入到 SSMS
中名为 FileTrackLog
的表中。
每次插入重复数据时,我的应用都会崩溃,因为 [Path] 字段是主键
。
如何检查如何不重新添加已存在的数据,而不会使我的应用程序崩溃?
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
SqlCommand cmd =
new SqlCommand(
"INSERT INTO [FileTrackLog] (Date, Client, Path, DateAddedToDb) " + // Dont foreget to add "DateAddedToDb" later when going live
" VALUES (@Date, @Client, @Path, @DateAddedToDb)"); // Dont foreget to add @"DateAddedToDb" later when going live
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
cmd.Parameters.Add("@Date", DbType.DateTime);
cmd.Parameters.Add("@Client", DbType.String);
cmd.Parameters.Add("@Path", DbType.String);
cmd.Parameters.Add(@"DateAddedToDb",DbType.DateTime);
foreach (var extractedRecord in extractedList)
{
cmd.Parameters[0].Value = extractedRecord.Date;
cmd.Parameters[1].Value = extractedRecord.Client;
cmd.Parameters[2].Value = extractedRecord.Path;
cmd.Parameters[3].Value = DateTime.Now;
cmd.ExecuteNonQuery();
}
conn.Close();
}
最佳答案
使用EXISTS
,我们可以检查该值是否已存在。
如果该值已存在,则跳过插入进度。
试试这个:
IF NOT EXISTS(SELECT 1 FROM [FileTrackLog] WHERE YourPrimaryKeyColumn = @PrimaryKeyInput)
BEGIN
INSERT INTO [FileTrackLog] (Date, Client, Path, DateAddedToDb)
VALUES (@Date, @Client, @Path, @DateAddedToDb)
END
关于c# - 如何在写入表之前检查数据是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50057149/