C#SQL数据适配器填写现有的类型化数据集

时间:2010-04-22 12:44:03

标签: c# sql ado.net dataset

我可以选择基于本地的数据存储(xml文件)或基于SQL Server。 我很久以前就为我的应用程序创建了一个类型化数据集,用于在xml文件中保存本地数据。

现在,我有一个bool,它在基于服务器的版本和本地版本之间进行了更改。如果为true,我的应用程序将从SQL Server获取数据。

我不确定但似乎Sql Adapter的填充方法无法填充现有架构中的数据

SqlCommand cmd = new SqlCommand("Select * FROM dbo.Categories WHERE CatUserId = 1", _connection);
                cmd.CommandType = CommandType.Text;

                _sqlAdapter = new SqlDataAdapter(cmd);
                _sqlAdapter.TableMappings.Add("Categories", "dbo.Categories");
                _sqlAdapter.Fill(Program.Dataset);

这应该将我的数据从dbo.Categories填充到Categories(在我的本地类型数据集中)。 但事实并非如此。它创建一个名为“Table”的新表。看起来它无法处理现有的架构。

我无法理解。问题在哪里?

顺便说一句。当然,我所做的数据库请求并不是那么有用。它只是一个用于测试的简化版本......

2 个答案:

答案 0 :(得分:1)

您正在使用的Fill重载,传入DataSet将始终在提供的DataSet中创建一个名为“Table”(MSDN)的新DataTable。

所以,我认为您需要将TableMapping更改为:

_sqlAdapter.TableMappings.Add("Table", "Categories");

MSDN)假设您的DataTable名称是“Categories”。

或者,不要使用TableMappings,只提供第二个参数 - 要填充的DataSet中的DataTable名称(MSDN)。我通常使用的方法实际上是传递要填充的DataTable本身,而不是DataSet(MSDN)。

答案 1 :(得分:0)

尝试_sqlAdapter.TableMappings.Add("Table", "Categories");,但我记得你还必须添加列映射。顺便说一句,你可以尝试创建类型化的dataadapter,这是没用的东西,但是你可以从那里进行映射。