我正在尝试使用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被命名为“工作”,但是我不确定我是否具有正确的语法,我输入了在SQL Server Management Studio中显示的表名,但是不知道如何测试它是否正确链接。
感谢您的任何帮助,您可以提供。我一直在跳动我的头脑,以至于我正以一种完全不同的方式接近我的目标并扔掉我所拥有的东西。
最佳答案
乍一看,在查看代码的第一行时,请查看firstSSN
的位置:
@"Select * From tblEmployees WHERE Name = " + firstSSN
我可以想象'Name'是错误消息所引用的nvarchar字段,并且如果firstSSN仅是整数值,请尝试在firstSSN周围放置''标记,如下所示:
@"Select * From tblEmployees WHERE Name = '" + firstSSN + "'"
否则,请确保字段“名称”的类型与您要传递给命令的参数的类型匹配。这很可能只是数据类型问题。
我为您提供的一个建议-前几天我刚开始使用LINQ进行实验,发现使用它非常方便,可以将数据提取,处理和过滤到易于使用的记录集中。关于如何使用LINQ执行查询的文档种类繁多,因此请花几分钟时间看看。希望这可以帮助。
关于c# - C#SqlDataAdapter.Fill在传递datatable参数时给出有关数据转换的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3513740/