C# 在c语言中处理sql复制问题#

C# 在c语言中处理sql复制问题#,c#,sql,C#,Sql,我不熟悉这种sql复制。我们有4个订户。我在其中一个表中有一列具有唯一键。数据类型为nvarchar。如果订阅服务器a插入带有“zxc”的行,订阅服务器B插入带有“zxc”的行。其中一个插入失败。如何在应用程序中处理此问题向用户显示用户正确的消息 例如,我有两个订户: 1.SubA 2.SubB 我有一张桌子 Table name : Names 我的名字表中有城市列(nvarchar),它是唯一的键 用户“A”连接到SubA。 用户“B”连接到子B “A”在上午10:30将一行加上“JAK

我不熟悉这种sql复制。我们有4个订户。我在其中一个表中有一列具有唯一键。数据类型为nvarchar。如果订阅服务器a插入带有“zxc”的行,订阅服务器B插入带有“zxc”的行。其中一个插入失败。如何在应用程序中处理此问题向用户显示用户正确的消息

例如,我有两个订户:

1.SubA
2.SubB
我有一张桌子

Table name : Names
我的名字表中有城市列(nvarchar),它是唯一的键

用户“A”连接到SubA。 用户“B”连接到子B

“A”在上午10:30将一行加上“JAKARTA”插入到名称表中。更新发布服务器需要20分钟。 “B”在上午10:35时将“JAKARTA”插入到名称表中

我在表上有唯一的约束,因此用户A的输入在发布者@10:50中更新。 但是用户B的输入陷入了冲突

我希望城市栏在所有潜艇中都是唯一的。 我该怎么办?我应该如何为用户B显示正确的消息?我应该如何对所有订阅服务器进行验证

我的申请是winforms。我正在使用城市的文本框。 我正在验证按钮单击事件。理想的解决方案是,如果我能在点击事件中捕捉到这一点 并显示类似“已存在一条同名记录。请重试”的消息


如果您需要更多信息,请告诉我这是一个应用程序/数据库设计问题。在这种情况下,第一个将名称表的本地副本与发布服务器同步的订户获胜,第二个订户将获得错误。最好的解决方案是完全避免冲突,并添加另一列作为唯一键(订户id?)的一部分这将使记录唯一或完全删除唯一约束,并让服务器进程稍后在需要时剔除重复的城市名称。

如果由于重复的密钥而失败,只需向用户显示密钥已被使用。您还可以在上找到更多帮助。@Steve My application仅连接到订户。所以,如果在订户级别失败,那么我将处理消息。但在发布者更新时失败。我应该如何处理此问题?@christiandev我对复制不熟悉。我不知道如何处理此问题。有很多方法可以解决此问题,但我们没有足够的信息来帮助解决此问题。这是Web应用程序、Windows应用程序、控制台应用程序吗?是否要捕获异常,并通过web表单标签、win表单标签、弹出窗口等返回原因。。
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)
    {

    }  
}