C# 如何将多台PC的数据保存到一个SQL表

C# 如何将多台PC的数据保存到一个SQL表,c#,sql-server,asp.net-mvc,C#,Sql Server,Asp.net Mvc,我想将一些数据从多台PC保存到一个表中。但是这些数据有一个索引(ID),可以手动填充,并从以前的数据(ID)排序,所以我首先在数据库中检查它,然后增加它。问题是,如果多台PC/设备一起保存,它将以相同的结果保存。如何解决这个问题 这是搜索上次使用的ID的查询: > public DataRow GetPlayerIDByClient(object clientPK) > { > DataRow result = null; >

我想将一些数据从多台PC保存到一个表中。但是这些数据有一个索引(ID),可以手动填充,并从以前的数据(ID)排序,所以我首先在数据库中检查它,然后增加它。问题是,如果多台PC/设备一起保存,它将以相同的结果保存。如何解决这个问题

这是搜索上次使用的ID的查询:

> public DataRow GetPlayerIDByClient(object clientPK)
>         {
>             DataRow result = null;
>  
>             if (clientPK != null)
>             {
>                 IDbDataParameter clientFKParam = this.CreateParameter(csPlayerNamesEntity.Names.ClientFK, clientPK);
>  
>                 string selectCommand = string.Format("SELECT TOP 1 * FROM {0} WHERE {1} = {3} AND " +
>                                                         "({2} LIKE 'G%' or {2} LIKE 'g%') ORDER BY {4} DESC",
>                                                         csPlayerNamesEntity.Names.TableName, //0
>                                                         csPlayerNamesEntity.Names.ClientFK, //1
>                                                         csPlayerNamesEntity.Names.ID,//2
>                                                         clientFKParam,//3
>                                                         csPlayerNamesEntity.Names.PK); //4
>  
>                 DataTable dt = this.ExecReaderDataTable(selectCommand, clientFKParam);
>  
>                 if (dt != null && dt.Rows.Count > 0)
>                 {
>                     result = dt.Rows[0];
>                 }
>             }
>  
>             return result;
>         }

如果您有一个从多个源更新的表,并且需要确保ID设置正确,那么有两种解决方案非常常见

一种是使主键成为一个标识列,该列在SQL Server本身上递增。如果在SQL Server中需要此值,则可以在最后使用SELECT SCOPE_IDENTITY()构造插入SQL,以便将Id返回到应用程序。SQL Server将对插入内容的两个程序/机器进行封送,您不会得到重叠的ID


另一种方法是使列成为唯一标识符,并从应用程序中提供Guid。由于它们是唯一的,无论来源如何,不同的机器/进程都不会冲突。但是,在大型表上可能会有性能损失,因为ID不是顺序的,并且它会分割表,因为SQL Server在插入时必须洗牌行,以便按正确的顺序为行腾出空间。

您听说过Entity Framework吗?在ASP.NETMVC应用程序中处理数据库时,这将使您的生活更加轻松。这是一个设计问题。您有多种可能的解决方案。您可以从中心实例同步客户端。或者最好将数据写入导入表,让数据库上的作业将导入的数据传输到生产表。SQL Server为您提供了此问题的解决方案。例如,您可以对ID列使用and identity列(自动增量),也可以使用序列检索下一个ID。Google For SQL Server序列。