我的問題很簡單: 我有一個SQL表列名「姓氏」與領域lastname1,lastname2,lastname3 ...如何檢查表中的字段是否已經存在?
在我的C#代碼,我有一個在表中插入的方法僅當列名字段不存在於表中時才行。此輸入中的方法具有姓氏,因此對於我的INSERT是一個參數。
我該如何比較和推斷檢查字段姓氏是否已經在表格中?
感謝
我的問題很簡單: 我有一個SQL表列名「姓氏」與領域lastname1,lastname2,lastname3 ...如何檢查表中的字段是否已經存在?
在我的C#代碼,我有一個在表中插入的方法僅當列名字段不存在於表中時才行。此輸入中的方法具有姓氏,因此對於我的INSERT是一個參數。
我該如何比較和推斷檢查字段姓氏是否已經在表格中?
感謝
你應該總是使用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;
}
....
對約束部分達成一致,但檢查是否存在某種東西幾乎總是比盲目地拍攝並處理異常要好。 – banging
@banging:取決於它有多可能。檢查可能有隱式競爭條件。 –
你是對的,但也許我沒有清楚地解釋我的問題。我想插入行如果不存在,但如果存在,但我有可能更新該行。在我的代碼中,我寫了一個簡單的方法(稱爲RecordExist),如果該字段在表中,則返回true,否則返回false。所以我有兩種不同的情況來管理。 – OmnipresentPerception
這個SQL將插入僅當這個值是不是已經在表中的一個新的記錄:
INSERT INTO Your_Table (LastName)
SELECT @NewLastName
WHERE NOT EXISTS(SELECT * FROM Your_Table WHERE LastName = @NewLastName)
不幸在我的c#代碼我有一個INSERT語句,我無法修改...對於我的目標,方式是通過代碼,而不是通過TSQL。我正在考慮用我的方法的輸入參數和表中記錄的值作爲參考,但我無法做到這一點。 – OmnipresentPerception
有兩個選項,一個是從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
}
這可以幫助你,你可以理解。
如果該值已經存在,您想要做什麼?姓氏似乎是「獨特」字段的一個奇怪選擇。 –