c# - 如何在写入表之前检查数据是否存在

标签 c# sql sql-server primary-key

我有一个 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/

相关文章:

sql-server - 截断 SQL Server 事务日志文件

c# - 使用 Silverlight 和 com-interop 进行打印

javascript - 使用 Node.js 和 Tedious 插入多条记录

SQL Server 聚集索引 - 索引问题的顺序

MySQL 查询 - 在 UPDATE 中使用 SELECT

sql-server - SQL Server 脚本快捷方式

sql-server - SSIS 作业无法连接到数据库

c# - 我应该多积极地进行子类化以保持 DRY?

c# - DataGridView - 添加到 DataSource 不反射(reflect)控件中的更改

c# - 我什么时候应该使用 List 与 LinkedList