复制到数据表时,对于 Int16 来说值太大或太小

发布于 2024-12-25 09:24:47 字数 459 浏览 1 评论 0原文

问:

下面的代码:

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

        dtInst = dtInstTotal.CopyToDataTable();//exception

抛出异常:

对于 Int16 来说值太大或太小。无法存储 <103930>在 emp_num 列中。预期类型为 Int16。 ---> System.OverflowException:值太大或太小 一个 Int16。

Q:

The following code:

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

        dtInst = dtInstTotal.CopyToDataTable();//exception

throw an exception:

Value was either too large or too small for an Int16.Couldn't store
<103930> in emp_num Column. Expected type is Int16. --->
System.OverflowException: Value was either too large or too small for
an Int16.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红墙和绿瓦 2025-01-01 09:24:47

我怀疑 dtExternal 具有 emp_numshort 类型,而 dtEmployed 具有其他类型(intlong 或可能只是 ushort) - 或者反之亦然。 CopyToDataTable 仅使用包含它看到的第一行的第一个表中的类型,然后当它遇到来自某个表的具有相同名称的列的值时就会出现问题不同的表。来自文档

目标表的架构基于源序列中第一个 DataRow 行的架构。表元数据是从 DataRow 元数据中提取的,表值是从 DataRow 的列值中提取的。

基本上:确保两个原始表具有相同的架构。

编辑:我们不知道填充两个原始 DataTable 的方法是什么样的 - 但您可能会发现,通过首先创建 DataTable,显式设置emp_num,然后然后填充表格,就可以了。

您甚至可以保留原来的方法,并使用正确的架构构建一个新的 DataTable,然后调用

dtInstTotal.CopyToDataTable(tableWithCorrectSchema, LoadOption.PreserveChanges);

I suspect that dtExternal has a short type for emp_num, whereas dtEmployed has some other type (int, long or maybe just ushort) - or maybe vice versa. CopyToDataTable just uses the types from the first table containing the first row it sees, and then it's having problems when it comes across a value for a column with the same name from a different table. From the docs:

The schema of the destination table is based on the schema of the first DataRow row in the source sequence. The table metadata is extracted from the DataRow metadata and the table values from the column values of the DataRow.

Basically: make sure your two original tables have the same schema.

EDIT: We don't know what your methods to populate the two original DataTables look like - but you may find that by creating the DataTable first, explicitly setting the type of emp_num, and then filling the table, that will be okay.

You could even leave your original methods alone, and build a new DataTable with the right schema, then call

dtInstTotal.CopyToDataTable(tableWithCorrectSchema, LoadOption.PreserveChanges);
我也只是我 2025-01-01 09:24:47

我认为 emp_num 的 dtInst 或 dtInstTotal 中的数据表结构是 int16 将其更改为 int32

i think the datatable structure in dtInst or dtInstTotal for emp_num is int16 change it to int32

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文