Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;这些列没有';t当前有唯一的值";,如何避免这种例外?_C#_Sql Server_Sqldataadapter - Fatal编程技术网

C# &引用;这些列没有';t当前有唯一的值";,如何避免这种例外?

C# &引用;这些列没有';t当前有唯一的值";,如何避免这种例外?,c#,sql-server,sqldataadapter,C#,Sql Server,Sqldataadapter,我试图将DataTable\u Table中的一列标记为主键,但它并不总是起作用 DataTable\u Table将填充一行,该行是从另一个DataTable(Table)复制而来的 因此,DataTable\u Table将保存从SQL Server中的表中获取的行, 或者,它将保存SQL Server中尚不存在的新行。 将行从表复制到表后,我调用此代码 _Table.PrimaryKey = new DataColumn[] { Table.Columns[PrimaryKeyName]

我试图将DataTable
\u Table
中的一列标记为主键,但它并不总是起作用

DataTable
\u Table
将填充一行,该行是从另一个DataTable(
Table
)复制而来的
因此,DataTable
\u Table
将保存从SQL Server中的表中获取的行,
或者,它将保存SQL Server中尚不存在的新行。
将行从
复制到
后,我调用此代码

_Table.PrimaryKey = new DataColumn[] { Table.Columns[PrimaryKeyName] };
现在,当该行来自数据库中的现有行时,运行这行代码时没有异常。这是因为主键列中有一个唯一的值

但当它保存新行时,主键列中的值仍然为空(identity列),这可能就是我现在得到此错误的原因

这些列当前没有唯一的值。”

目前我正在捕获异常,然后我就吃了异常,一切都正常。
但是,这感觉像是一些肮脏的黑客,我想正确地做这件事


那么,有没有一种方法可以在datatable中将一列标记为
主键
,该列中只有一行,并且该列当前包含空值?

否,DataAdapters中的表确实需要这些列中的主键和实际数据才能正常工作

您在评论中提到,当您调用
.Update()
时,会出现错误。原因是它需要创建PrimaryKey,以便知道如何识别要更改的行。是的,您可能在datatable(和数据库)中只有一行,但由于表可能有多行,而且通常都有多行,因此SQLDataAdapter确实需要PrimaryKey

由于显而易见的原因,PrimaryKeys不能有空值,这是问题的根源,但从设计角度来看,您可以在数据库中有一个标识列(iirc DataTable等效项为Autonumber),并将其配置为PrimaryKey。如果这样做,DataTable的主键中就不会有空值,因为新行将使用数据库提供的标识值

你可以查一下电话号码


注意:如果您正在创建新软件,则值得考虑Panagiotis建议(使用较新的数据访问框架)

否。根据定义,主键不能有任何可为空的列
NULL
不是一个值,它意味着根本没有值。如果你将“无”与“无”进行比较,唯一合理的结果是“无”,而不是“是”或“错”。这意味着不能使用可空列来标识记录,这就是PKs的用途如果您只想让DataTable保存一行,就不需要主键“目前我捕获了异常,然后我只吃了异常,一切都正常。”@PanagiotisKanavos这也是我的想法,但是,当我调用
adapter.Update(Table)
VS时,我没有为update@Cleptus那么,你为什么认为我在问这个问题呢。我知道这不好,我需要一些帮助来做得更好。所以如果你知道更好的方法…谢谢你的回答。不幸的是,这不是一个新项目,所以我在这里几乎没有选择。另外,请阅读我的最后一条评论,我的问题是关于我面临的主要关键问题