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

时间:2010-08-18 15:26:28

标签: c# datatable fill sqldataadapter

我正在尝试使用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中显示的表名,但不知道我是如何测试它是否正确连接。

感谢您提供的任何帮助。我一直在打我的脑袋,以至于我正以一种完全不同的方式接近我的目标并抛弃我拥有的东西。

1 个答案:

答案 0 :(得分:2)

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

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

我认为'Name'是错误消息引用的nvarchar字段,如果firstSSN只是一个整数值,请尝试在firstSSN周围加上''标记,如下所示:

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

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

我给你的一个建议 - 我前几天才开始尝试使用LINQ,并发现将数据拉出,操作和过滤成易于使用的记录集非常方便。有关如何使用LINQ执行查询的各种文档,请查看是否有几分钟。希望这会有所帮助。