1

の構造を定義できる xsd DataSet スキーマがありますDataTable。すべての列にデフォルト値を設定したので、新しい行を作成するときに、代わりにインスタンス化された値 (文字列の場合は ""、整数の場合は 0) を取得します。DbNull

次の2つのメソッド呼び出しのいずれかでDataTable.Loador asを使用するときにそれを保持したいSqlDataAdapter.Fill

Dim table1 As New CodeSetSchemas.EntityByRoleDataTable()
Using reader As SqlDataReader = cmd.ExecuteReader()
    table1.Load(reader)
End Using

Dim table2 As New CodeSetSchemas.EntityByRoleDataTable()
Using adapter As New SqlDataAdapter(cmd)
    adapter.Fill(table2)
End Using

ただし、これらのメソッドのいずれかが新しい行を作成すると、実際にはデータベースから DbNull が行に書き込まれます。AllowDBNull各列のプロパティを に設定するFalseと、次の例外が発生します。

Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

DataTable を埋めるときに各行のデフォルト値を保持する方法はありますか?

4

2 に答える 2

0

私もその問題に遭遇しました。残念ながら、DataTable.Load または SqlDataAdapter.Fill は、xsd データセット スキーマで必要な既定値をバイパスします。ロードまたはフィルの後に、コードを使用してデフォルト値を入力する必要があります。

load または fill を使用する場合、実際には新しい行自体を作成しているわけではありません。他の場所から行を取得しています。これは、SQL が実際にその場で行を作成している場合でも当てはまります。

後でコードを使用してデータ テーブルを修正するよりも優れた解決策は、フィルまたはロードの SQL を変更して、IsNull(x, 0) または IsNull(x, '') を使用することです。

于 2013-07-11T05:50:24.323 に答える