C# SqlDataAdapter.Fill 在传递数据表参数时给出关于数据转换的错误

Posted

技术标签:

【中文标题】C# SqlDataAdapter.Fill 在传递数据表参数时给出关于数据转换的错误【英文标题】:C# SqlDataAdapter.Fill giving error about data conversion when passed datatable parameter 【发布时间】:2010-08-18 15:26:28 【问题描述】:

我正在尝试使用 C# 中的 SqlDataAdapter 填充数据表。我对这些对象不是很熟悉,基本上是在使用别人的代码模板来尝试弄清楚它是如何工作的。这是基本形式。

        SqlCommand command = new SqlCommand(@"SELECT * FROM tblEmployees WHERE Name = " + firstSSN,connection);

        SqlDataAdapter adapter = new SqlDataAdapter(command.CommandText.ToString(), connection.ConnectionString.ToString());

        SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;
        adapter.Fill(table);

这在他们的表格上效果很好。我尝试对我的做同样的事情,但在尝试将 nvarchar 转换为数据类型 int 的列时出错。我查看了 MSDN 并尝试了以下操作: 1) 使用来自 tblEmployees 的适当名称/类型/主键将列添加到 DataTable。 2) 将 TableMapping 添加到 DataAdapter,尽管我不是 100% 确定我在这部分的语法是正确的。我愿意:

adapter.TableMappings.Add("work", "dbo.tblEmployees");

为此。 DataTable 被命名为“work”,但我不确定我的语法是否正确,我输入了 SQL Server Management Studio 中显示的表名,但不知道如何测试它是否正确链接。

感谢您提供的任何帮助。我一直在努力解决这个问题,以至于我即将以完全不同的方式接近我的目标并丢弃我所拥有的。

【问题讨论】:

在 SELECT * FROM tblEmployees WHERE Name = " + firstSSN -> Name = "ZzzName" 中使用引号 String.Format("SELECT * FROM tblEmployees WHERE Name = '0'", firstSSN) 噢!我不敢相信我忘记了,非常感谢。 【参考方案1】:

乍一看,在查看代码的第一行时,请查看firstSSN 的位置:

@"Select * From tblEmployees WHERE Name = " + firstSSN

我认为“名称”是错误消息所引用的 nvarchar 字段,如果 firstSSN 仅为整数值,请尝试在 firstSSN 周围放置“”标记,如下所示:

@"Select * From tblEmployees WHERE Name = '" + firstSSN + "'"

否则,请确保“名称”字段的类型与您传递给命令的参数的类型相匹配。这很可能只是数据类型问题。

我给你的一个建议 - 前几天我刚开始试验 LINQ,发现它非常方便用于提取、操作和过滤数据到一个易于使用的记录集。有各种关于如何使用 LINQ 执行查询的文档,如果您有几分钟的时间,请看一下。希望这会有所帮助。

【讨论】:

以上是关于C# SqlDataAdapter.Fill 在传递数据表参数时给出关于数据转换的错误的主要内容,如果未能解决你的问题,请参考以下文章

SqlDataAdapter.Fill 命令使 SQL CPU 达到峰值

SqlDataAdapter.Fill - 异步方法

SqlDataAdapter.Fill() 溢出异常

SqlDataAdapter.Fill(DataGridView.DataSource) 复制所有行

SqlClient.SqlDataAdapter.Fill(DataSet) 结果如果不选择查询

SqlDataAdapter.Fill 方法慢