SQL CE如何防止重复插入

时间:2018-05-08 12:01:49

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

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个现有列。

3 个答案:

答案 0 :(得分:0)

您可以在4列

上添加唯一约束
CONSTRAINT UC_unique UNIQUE (col1, col2, col3, col4)

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

答案 1 :(得分:0)

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

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
}

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

答案 2 :(得分:0)

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