我是這個sql複製的新手。我們有4個用戶。我有一列中有一列有唯一鍵。數據類型是nvarchar。如果subscriberA插入一行'zxc'並且訂戶B插入一行'zxc'。其中一個插入失敗。我如何在應用程序中處理這個向用戶顯示用戶正確的消息。在c中處理sql複製問題#
比如我有兩個用戶:
1.SubA
2.SubB
我有一個表。
Table name : Names
我在我的名字表中有City列(nvarchar),它是唯一鍵。
用戶'A'連接到SubA。 用戶'B'連接到SubB。
'A'將'JAKARTA'一行插入名字表@ 10:30 am。這將需要20分鐘來更新發布者。 'B'將'JAKARTA'一行插入名字表@ 10:35。
我對錶格有唯一約束,所以用戶A的輸入在發佈者@ 10:50中更新。 但用戶B的輸入陷入了衝突。
我希望城市列應該在所有潛艇中都是唯一的。 我該如何處理?我應該如何顯示用戶B的正確信息?我應該如何對所有用戶進行驗證?
我的應用程序是winforms。我正在使用城市的文本框。 我正在驗證按鈕點擊事件。理想的解決方案是,如果我能夠在點擊事件 中捕獲此信息並顯示消息,如「一個記錄已經存在與此name.try再次。」
private int Validation(string str)
{
SqlConnection conn = new SqlConnection("ConnectionString");
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM dbo.Names where city = @str", conn);
cmd.Parameters.Add("@City", SqlDbType.VarChar, 100);
cmd.Parameters["@City"].Value = str;
int count = (Int32) cmd .ExecuteScalar();
conn.Close();
return count;
}
private void button1_Click(object sender, System.EventArgs e)
{
try
{
if(Validation(testbox1.text) == 0)
{
SqlConnection conn = new SqlConnection("ConnectionString");
string sql = "INSERT INTO dbo.Names (city) VALUES(@City)";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@City", SqlDbType.VarChar, 100);
cmd.Parameters["@Name"].Value = textbox1.text;
cmd.ExecuteNonQuery();
}
else
{
//display message
}
}
catch(Exception ex)
{
}
}
讓我知道如果你需要更多的信息
如果由於重複密鑰而失敗只是向用戶顯示密鑰 – Steve
您也可以在[dba.se]找到更多幫助。 –
@Steve我的應用程序只連接到訂閱者。 所以如果在訂戶級失敗,那麼我正在處理消息。 但它在發佈者更新失敗。我該如何處理? – user3361813