2

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

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

4

1 回答 1

2

乍一看,在查看代码的第一行时,请查看在哪里firstSSN

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

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

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

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

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

于 2010-08-20T21:02:12.143 回答