2014-11-08 72 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.