2013-08-21 112 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 
    } 

這可以幫助你,你可以理解。

相關問題