2014-11-08 71 views
1

对于作业任务,我必须开发一个C#应用程序来连接SQL Server数据库文件(.mdf),并提供一个dataGridView浏览内容和几个按钮来执行查询。新查询返回的模式与基本查询不同(C#/ SQL - VS 2012)

我一直很顺利,找到如何查询添加到我的表适配器,如何叫他们等等

现在我有问题使返回薪在hourlyPayRate查询。

我有一个数据库employee,它包含以下属性:employeeID, name, position, hourlyPayRate

我的查询是

SELECT MAX(hourlyPayRate) 
FROM employee 

我右击employeeTableAdapter,单击 “添加查询...”,将其命名为Max,并把查询。当我点击确定时,我收到以下错误消息:

新查询返回的模式与基本查询不同。

该查询在查询生成器中正确执行,只有当我单击“确定”来保存它才会收到错误。

环顾SE这个问题没有确切的答案。

谢谢,迈克尔。

+0

您是否尝试过在您的查询走样你的专栏?例如:“SELECT MAX(hourlyPayRate)as MaxPayRate FROM employee”这是一个延伸,但dataGridView可能会在未命名的列上变动。 – DeadZone 2014-11-10 19:36:03

+0

我试过 'SELECT MAX(hourlyPayRate)as Expr1 FROM employee' 没有任何改进。 – user3560189 2014-11-11 06:18:49

+0

当我尝试从DataGridView添加查询时(通过单击“Datagridview Tasks”弹出按钮),我得到相同的错误。但是,如果我通过使用TableAdapter上的弹出按钮添加查询,则可以成功添加第二个查询。你有没有尝试以这种方式添加查询? – DeadZone 2014-11-11 13:23:24

回答

1

解决方案已被发现,为所有这些想知道。

问题是查询返回的表的列数与数据库的列数不同。

通常在大多数DBMS中这不是问题,但由于某些原因,Visual Studio没有这个功能。

的解决方案是该查询:

SELECT employeeID, name, position, hourlyPayRate FROM employee WHERE (hourlyPayRate = (SELECT MAX(hourlyPayRate) AS MaxRate FROM employee AS TempTable))

然后从结果修剪不需要的,只要你喜欢。对我来说,这只是一个简单的标签,它只是从hourlyPayRate属性派生出来的数据。

0

这样做的实际原因是,基础QUERY返回的列数多于或少于您正在添加的QUERY。 Visual Studio关心这一点;并且毕竟不应该是一个新的查询。

注意:我们正在查询列而不是数据库表列。错误关于基本查询 - 例如填充,也许您想要填充并隐藏foreignID的字段 - 因为您的基本查询输出该列,并且添加的查询不会 - 新查询与基本不同因为列不一样。 (我想这样做是为了确保绑定对象是正确绑定;但我真的不知道(认为的DataGridView)

因此,例如

Fill() Query 
SELECT  Id, Name, FKtblThing_ID 
FROM   ITEMS 

添加此查询工作..。

FillByID() Query 
SELECT  Id, Name, FKtblThing_ID 
FROM   ITEMS 
WHERE  (FKtblThing_ID = @FKtbl_ThingID) 

相反,如果你尝试过这一点 - 这是行不通的。

FillByID() Query 
SELECT  Id, Name 
FROM   ITEMS 
WHERE  (FKtblThing_ID = @FKtbl_ThingID) 

这是错误您将收到:

The schema returned by the new query differs from the base query.