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(DataGridView.DataSource) 复制所有行