2013-08-21 191 views
0

我的问题很简单: 我有一个SQL表列名“姓氏”与领域lastname1,lastname2,lastname3 ...如何检查表中的字段是否已经存在?

在我的C#代码,我有一个在表中插入的方法仅当列名字段不存在于表中时才行。此输入中的方法具有姓氏,因此对于我的INSERT是一个参数。

我该如何比较和推断检查字段姓氏是否已经在表格中?

感谢

+2

如果该值已经存在,您想要做什么?姓氏似乎是“独特”字段的一个奇怪选择。 –

回答

2

你应该总是使用unique constraints表中的一个字段必须是唯一的。这样,即使输入是直接来自SSMS或其他应用程序,也可以始终防止重复。

然后最简单的方法就是处理根据数字引发的sql异常。

.... 

try 
{ 
    int inserted = cmd.ExecuteNonQuery(); 
} catch (SqlException ex) 
{ 
    if (ex.Number == 2601) 
    { 
     // show meaningful error message 
     MessageBox.Show("Cannot insert duplicate key row in object"); 
    } 
    else 
     throw; 
} 

.... 
+2

对约束部分达成一致,但检查是否存在某种东西几乎总是比盲目地拍摄并处理异常要好。 – banging

+3

@banging:取决于它有多可能。检查可能有隐式竞争条件。 –

+0

你是对的,但也许我没有清楚地解释我的问题。我想插入行如果不存在,但如果存在,但我有可能更新该行。在我的代码中,我写了一个简单的方法(称为RecordExist),如果该字段在表中,则返回true,否则返回false。所以我有两种不同的情况来管理。 – OmnipresentPerception

0

这个SQL将插入仅当这个值是不是已经在表中的一个新的记录:

INSERT INTO Your_Table (LastName) 
SELECT @NewLastName 
WHERE NOT EXISTS(SELECT * FROM Your_Table WHERE LastName = @NewLastName) 
+0

不幸在我的c#代码我有一个INSERT语句,我无法修改...对于我的目标,方式是通过代码,而不是通过TSQL。我正在考虑用我的方法的输入参数和表中记录的值作为参考,但我无法做到这一点。 – OmnipresentPerception

0

有两个选项,一个是从SQL方面的另一种方式是从后面的代码。

不幸的是,你不能改变你的SQL代码,我同意@David。

从代码背后你必须做这样的事情。

首先,您必须从表中选择所有数据并检查数据。像这样的东西。

SqlConnection con = new SqlConnection(); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = con; //Your connection string" 
    cmd.CommandText = "Select * from table1"; // your query 
    cmd.CommandType = CommandType.Text; 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    da.Fill(ds); 
    DataTable dt = new DataTable(); 
    dt = ds.Tables[0]; 
    int count=0; 
    for (int i = 0; i > dt.Rows.Count; i++) 
    { 
     if (Convert.ToString(dt.Rows[i]["LastName"]) == Lastname) 
     { 
      count++; 
     } 
    } 
    if (count > 0) 
    { 
     //insert code for data 
    } 
    else 
    { 
     var script = "alert('"+ Lastname + "already exist.');"; 
     ClientScript.RegisterStartupScript(typeof(Page), "Alert", script, true); 
     // or you can use here your Update statement 
    } 

这可以帮助你,你可以理解。

相关问题