【问题标题】:update of dataset doesn't work? WPF C#数据集更新不起作用? WPF C#
【发布时间】:2011-06-17 04:09:11
【问题描述】:

我有一个 WPF 情况,一个页面有一个带有客户端的数据网格,另一个页面有一个字段来填写一个新的客户端。

我希望“new-client-page”搜索最高的 clientID 并以 1 作为新客户端,这听起来很简单,但我遇到了问题。

在表的表适配器中,我新增了一个查询:SELECT MAX(clientID) FROM clients

我执行查询:

DataSet1TableAdapters.klantenTableAdapter tableAdapter = new DataSet1TableAdapters.klantenTableAdapter();
DataSet1 datasetvar = new DataSet1();
int returnValue = (int)tableAdapter.GetMaxKlantnr();

这一次可以正常工作。我在returnValue 中得到了最高值,但是如果我第二次进入“new-client-page”,clientID 仍然是一样的..

我尝试使用tableAdapter.Update(datasetvar); 更新数据集,但这没有意义.. :(

【问题讨论】:

  • 为什么要在客户端选择ID?为什么不让数据库分配ID?
  • 我该怎么做?自动增量还是什么?

标签: c# wpf dataset


【解决方案1】:

Lars 你用的是什么数据库?将 ID 列设置为标识,它将由数据库自动生成,您的解决方案无论如何都不支持任何并发,这不是读取最大 id 并向其添加 1 的方法...

【讨论】:

  • 我使用 Microsoft SQL Server Compact 3.5。我找不到那里的“身份”。还有另一个与此相关的问题:在我的 INSERT 查询中我必须填写什么?现在我使用 INSERT INTO clients VALUES (clientID, name, city.... etc);
  • 一旦字段被标记为身份,您就不必再在插入中指定 clientid 字段名和值。不确定,但我想 SQL Compact HAS 支持身份...
  • 好吧,我知道了,该怎么做。但这不是我的解决方案。 A 必须按照我在问题中所说的那样做,因为我想制作一个带有备份系统的程序。因此,一旦我的 PC 崩溃或发生其他情况,只需单击一下,我就可以将互联网数据放回本地数据库。身份列不允许更改..
【解决方案2】:

您需要在添加新行时进行设置。然后它由适配器作为 INSERT 执行。适配器只提交更改。

代码看起来几乎像:

var newRow = ClientTable.NewRow();

newRow["ClientID"] = GetNewID();
...set other fields...

ClientTable.Rows.Add(newRow);

Adapter.Update(ClientTable);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多