2017-07-19 74 views
-1

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

这是搜索,所使用的最后一个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; 
>   } 
+0

您是否听说过实体框架?在处理ASP.NET MVC应用程序中的数据库时,它会让你的生活更轻松。 – Robert

+0

这是一个设计问题。你有多种可能的解决方案。您可以从中央实例同步客户端。或者,最好将数据写入导入表中,并让数据库上的作业将导入的数据传输到生产表。 –

+0

SQL Server为您提供解决此问题的解决方案。例如,您可以为ID列使用和标识列(自动增量),或者可以使用序列来检索下一个ID。 Google for SQL Server序列。 –

回答

0

如果您有来自多个源表更新,你需要确保ID正确设置有两种解决方案,是相当常见的。

一种是使主键成为在SQL Server本身上增加的标识列。如果您在SQL Server中需要此值,则可以在最后使用SELECT SCOPE_IDENTITY()构造INSERT SQL,以便将该Id返回到您的应用程序。两个程序/机器插入的东西将由SQL Server编组,并且你不会得到重叠的ID。

另一种方法是将该列设置为UNIQUEIDENTIFIER并从应用程序提供Guid。由于它们是独一无二的,所以不同的机器/过程不会发生冲突。但是,在大型表上可能会有性能损失,因为Ids不会按顺序排列,并且会对表进行分段,因为SQL Server在插入时必须对行进行随机播放,以便按正确的顺序为行提供空间。

相关问题