簡體   English   中英

“這些列當前沒有唯一值”,如何避免此異常?

[英]"These columns don't currently have unique values", how to avoid this exception?

我試圖將我的 DataTable _Table中的一列標記為主鍵,但它並不總是有效。

DataTable _Table將填充一行,該行是從另一個 DataTable ( Table ) 復制的
因此,DataTable _Table將保存從 SQL 服務器的表中獲取的行,
否則它將保留 SQL 服務器中尚不存在的新行。
Table中的行復制到_Table后,我調用此代碼

_Table.PrimaryKey = new DataColumn[] { Table.Columns[PrimaryKeyName] };

現在,當行來自數據庫中的現有行時,運行這行代碼時也不例外。 那是因為主鍵列中存在唯一值。

但是當它擁有一個新行時,主鍵列中的值仍然是空的(標識列),這可能就是我現在得到這個錯誤的原因。

這些列當前沒有唯一值。

目前我正在捕捉異常,然后我只是吃異常,一切都運行良好。
但是,感覺就像一些骯臟的黑客,我想正確地做到這一點。

那么,有沒有一種方法可以將一列標記為數據表中的primary key ,其中只有一行,並且該列當前包含 null 值?

不,來自 DataAdapter 的表確實需要主鍵和這些列中的實際數據才能正常工作。

您在評論中提到,當您調用.Update()時會出現錯誤。 原因是它需要創建 PrimaryKey,以便它知道如何識別要更改的行。 是的,您可能在數據表(和數據庫中)中只有一行,但由於該表可能有幾行,而且通常它們確實如此,SQLDataAdapter 確實需要 PrimaryKey。

由於顯而易見的原因,PrimaryKeys 不能具有 NULL 值,這是問題的根源,但從設計的角度來看,您可以在數據庫中擁有一個 Identity 列(iirc,DataTable 等效於 Autonumber)並將其配置為 PrimaryKey。 如果這樣做,DataTable 將永遠不會在主鍵中包含 NULL 值,因為新行將使用數據庫提供的標識值。

您可以查看ADO.NET 身份文檔

注意:如果您正在創建新軟件,值得考慮 Panagiotis 建議(使用更新的數據訪問框架)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM