2010-04-22 151 views
0

我有一个选择基于本地的数据存储(xml文件)或基于SQL Server的选择。 我已经很久以前创建了一个用于我的应用程序的类型化数据集,以将数据保存在xml文件中。C#SQL数据适配器填充现有的键入数据集

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

我不知道,但它似乎在我的现有模式

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填补我的数据类别(在我的本地SQL适配器的Fill方法可以不填数据,键入数据集)。 但它没有。它创建一个名为“Table”的新表。它看起来不能处理现有的模式。

我找不出来。哪里有问题?

btw。当然,我所做的数据库请求并不是那么有用。这只是测试的简化版本...

回答

1

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

所以,我认为你要么需要你TableMapping更改为:

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

MSDN)假设你的数据表名称是 “分类”。

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

+0

问题是,我已经有一个现有的数据模式。但这些表的名称不是sql数据库中的表。所以我试图使TableMapping的SQL数据库匹配本地数据集架构。 不要问我,为什么这样。但我认为应该有一个解决方法,而不是重命名服务器上的表。 – 2010-04-22 13:06:00

+0

@Rene - 我并不是说你需要重新命名任何表格。你在我的回答中检查了第二个链接吗?无关紧要的是,SQL数据库中的表名与DataSet中的DataTables具有不同的名称。在我给第二个链接看到图1 – AdaTheDev 2010-04-22 13:17:50

+0

啊,好吧,对不起,你的权利。我必须测试一下。第3条链接很好。我希望这也适用于列名。 这是一种解决方法,但它不能解决我使用TableMapping时遇到的问题。但这是一个解决方案。 我要试一试。 – 2010-04-23 05:56:37

0

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

+0

我也有ColumnMappings,但它没有更好的工作方式。这很奇怪。我无法设置TableMappings添加参数。我一直得到“Table”而不是TableMapping中的名字。 – 2010-04-22 12:56:10