2

Q:

次のコード:

        var dtInstTotal = dtExternal.AsEnumerable()
                    .Union(dtEmployed.AsEnumerable())
                    .OrderBy(d => d.Field<string>("emp_name"));

        dtInst = dtInstTotal.CopyToDataTable();//exception

例外をスローします:

Int16 の値が大きすぎるか小さすぎます。emp_num 列に <103930> を格納できませんでした。予想される型は Int16 です。---> System.OverflowException: 値が Int16 に対して大きすぎるか小さすぎます。

4

2 に答える 2

1

emp_num の dtInst または dtInstTotal のデータテーブル構造は、次のようにint16変更されていると思いますint32

于 2012-01-05T07:31:11.373 に答える
1

dtExternalには のshort型があると思われますが、 には他の型 ( 、または単に) があるか、またはそのemp_num逆の可能性があります。最初の行を含む最初のテーブルの型を使用するだけで、別のテーブルの同じ名前の列の値に遭遇すると問題が発生します。ドキュメントから:dtEmployedintlongushortCopyToDataTable

宛先テーブルのスキーマは、ソース シーケンスの最初の DataRow 行のスキーマに基づいています。テーブル メタデータは DataRow メタデータから抽出され、テーブル値は DataRow の列値から抽出されます。

基本的に: 2 つの元のテーブルのスキーマが同じであることを確認してください。

編集: 2 つの元DataTableの s にデータを入力する方法がどのように見えるかはわかりませんが、最初のものを作成し、DataTableの型を明示的に設定してからemp_num、テーブルに入力することで問題ないことがわかります。

DataTable元のメソッドをそのままにして、適切なスキーマで新しいメソッドを構築してから呼び出すこともできます

dtInstTotal.CopyToDataTable(tableWithCorrectSchema, LoadOption.PreserveChanges);
于 2012-01-05T07:22:45.867 に答える