【问题标题】:SQL CE how to prevent duplicate insertSQL CE如何防止重复插入
【发布时间】:2018-05-08 12:01:49
【问题描述】:
SqlCeCommand command = new SqlCeCommand(@"INSERT INTO fpl_table 
                                                    (FLIGHT_ID, BPN_TIME, BPX_TIME, DAY_NB) 
                                                    VALUES (@FLIGHT_ID, @BPN_TIME, @BPX_TIME, @DAY_NB)
                                                    ON DUBLICATE UPDATE FLIGHT_ID = @FLIGHT_ID, BPN_TIME=@BPN_TIME,BPX_TIME=@BPX_TIME,DAY_NB=@DAY_NB"
                                                    ,connection);

command.Parameters.AddWithValue("FLIGHT_ID", format);
command.Parameters.AddWithValue("BPN_TIME", format1);
command.Parameters.AddWithValue("BPX_TIME", format2);
command.Parameters.AddWithValue("DAY_NB", format3);

大家好!

我遇到了将 4 个值插入列的问题。我想阻止将 4 个现有列插入数据库,我不能将它们设置为唯一,因为同一列可以插入其他 1,2 或 3 个列,我只想阻止仅 4 个现有列插入。

【问题讨论】:

  • 您可以同时在 4 列上添加唯一索引
  • 使用 IF Exists 检查特定列中是否存在 4 个值,如果不存在则插入 else 更新。
  • 数据是在datagridView上查看的,所以我试图检查datagridView.rows[].cells[].value是否等于数据,做更新,但是,当它不等于时,插入是做了很多次
  • 我正在使用 SQL SERVER COMPACT 4.0 数据库 (.sdf)
  • @VTodorov 例如,如果插入 4 列 (data1,data2,data3,data4) 需要防止插入相同的列,所以要能够插入 (data1,data2,data5,data6) .唯一索引会起作用吗?

标签: c# sql .net sql-server-ce


【解决方案1】:

您可以在 4 列上添加唯一约束

CONSTRAINT UC_unique UNIQUE (col1, col2, col3, col4)

https://www.w3schools.com/sql/sql_unique.asp

【讨论】:

  • 如插入4列(data1,data2,data3,data4)需要防止插入相同的列,所以要能够插入(data1,data2,data5,data6)跨度>
  • 您可以使用 CONSTRAINT 或唯一索引,两者都可以正常工作
  • 好的,我会检查的
【解决方案2】:

为什么不首先使用单独的函数来找出重复记录。

bool CheckDuplicateFlight(int FLIGHT_ID)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"YOURCONNECTION STRING";
con.Open();
if (con.State == System.Data.ConnectionState.Open)
{
SqlCeCommand cmd = new SqlCeCommand("select count(*) from YOURTABLE where FLIGHT_ID= @FLIGHT_ID", con);
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.AddWithValue("@FLIGHT_ID",FLIGHT_ID);
int ExistingId= Convert.ToInt32(cmd.ExecuteScalar());
}
con.Close();
if(ExistingId> 0)
    return true;
return false;
}
if(CheckDuplicateFlight(FLIGHT_ID))
{
///// Your insertion/Update Code here
}

但是您的问题有点令人困惑,您确定要插入记录而不是更新吗?插入查询总是插入新记录。

【讨论】:

  • 是的,我每秒都在插入新数据,并且想防止插入所有 4 个重复的列,但是如果查询中只有 3 个列重复则插入
  • 您需要将唯一约束添加到 3 列,而不是在代码中使用异常处理,插入新记录。
【解决方案3】:

您需要将唯一约束添加到 3 列,而不是在代码中使用异常处理,插入新记录。

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 2015-08-07
    • 2012-01-06
    • 2016-08-24
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多