2013-04-05 53 views
1

我使用VS 2012快,SQL Server 2012的我有一個表(電腦)和兩排,10列(HaHu_ID,序列號,品牌,型號,操作系統,處理器,硬盤,內存,ST,速度)。SQL SELECT語句(在vb.net)返回空的和/或怪異行

我已經在這個網站閱讀儘可能多的職位,我可以嘗試創建一個vb.net接口到SQL Server。我在連接它們,並用

SELECT * FROM computers 

返回值一個DataGridView表成功,但是當我試圖像

SELECT * FROM computers 
WHERE 'HaHu_ID' = '101' 

其他命令返回一個空的DataGridView行!嘗試將'HaHu_ID'改爲隨機的東西,但它仍然給我空行。顯示正確的列名稱,但行全部爲空。

當我試圖另一個命令「SELECT‘HaHu_ID’,‘品牌’從計算機」和它返回:

Column1---|--Column2 

-HaHu_ID--|--Brand 
-HaHu_ID--|--Brand 

列名稱已更改爲「列1和列2」,正如你所看到的行填充了什麼應該是列名!沮喪的我試過「SELECT‘HaHu’,‘Brand_ID’從計算機」(在我的數據庫不存在的列),並將其與返回:

Column1---|--Column2 

---HaHu----|--Brand_ID 
----HaHu---|--Brand_ID 

我又回到了原來的SELECT * FROM computers並再次將其作品!

這裏是我的代碼:

Dim cs as New SqlConnection... 
cs.Open() 
'Dim da2 as New SqlDataAdapter("SELECT * FROM computers WHERE 'HaHu_ID' = '101'", cs) 
Dim da2 as New SqlDataAdapter("SELECT * FROM computers", cs) 
Dim table as New DataTable() 
table.Locale = System.Globalization.CultureInfo.InvariantCulture 
da2.Fill(table) 
BindingSource1.DataSource = table 
dataGrid1.DataSource = BindingSource1 
cs.Close() 

(我不能複製和粘貼,因爲我現在另一臺計算機上)。所以select * from computers聲明完美的工作,但只要我嘗試別的東西它不起作用。

這是爲什麼?謝謝。

回答

0

不要把周圍的列名的單引號。在哪裏HaHu_ID ='101'是正確的。

+0

哇哦謝謝...瘋狂了兩天,因爲一個單引號的?我幾乎放棄了!非常感謝你! – 2013-04-05 19:59:22

+0

不客氣! – Melanie 2013-04-05 20:02:32

1

單引號,用於指定的字符或字符串。下面的SQL語句是選擇字符串「HaHu_ID」和字符串「品牌」,並正在恢復對您在電腦桌有充分的記錄。而且,由於沒有別名分配,服務器返回列1,列2等的默認

SELECT 'HaHu_ID', 'Brand' FROM computers 

爲了逃避列名,用方括號,例如:

SELECT [HaHu_ID], [Brand] FROM [computers] 
+0

有趣,謝謝! – 2013-04-05 20:55:19

0

正確的,你要比較這兩個字符串:

SELECT * FROM computers WHERE 'HaHu_ID' = '101' 

嘗試:

SELECT 'foo' FROM computers WHERE HaHu_ID = '101' 

(假設它是一個字符類型列,而不是數字)

+0

爲什麼你要返回一個字符串'foo'?那會打破他的邏輯。 – George 2013-04-05 20:18:30

+0

看起來他只是在上面粘貼的代碼中填充了一個通用的DataTable,所以它不應該破壞它。 :) 此外,提問者:儘量避免使用select *,而是使用select列名稱。如果您正在查詢*並接受它提供給您的信息,則可能會以多種方式陷入困境。 – Cortright 2013-04-05 20:26:24

+0

我不得不搜索'foo'部分的含義,但是在Google搜索幾分鐘後,似乎會爲我節省大量打字工作。 無意提交我的帖子... 反正,如果'*'的意思是「全部」,它不會總是返回該特定表中的所有列嗎?謝謝。 – 2013-04-05 21:37:06

0

這是你想要做什麼?

SELECT * FROM computers 
WHERE col1 = 'HaHu_ID' and col2 = '101' 

SELECT * FROM computers 
WHERE col1 like '%HaHu_ID%' and col2 like '%101%' 

如果沒有,什麼是 「SELECT * FROM電腦」 回報嗎?

+0

不,我只是想做: 選擇*從[電腦]在哪裏[HaHu_ID] ='101' 謝天謝地,Melanie和CM Kanode指出我在正確的方向,現在它工作正常。 – 2013-04-05 21:53:45

0

私人小組TxtID_TextChanged(發送者爲對象,例如作爲EventArgs的)把手TxtID.TextChanged

昏暗DS作爲新My_Ticket_MachineDataSet

「連接設置

昏暗CON作爲新的SqlConnection(」數據源= LEES-PC;初始目錄= My Ticket Machine; Integrated Security = True「)

'哪一行選擇

昏暗COM作爲新的SqlCommand( 「從FareChartTest選擇*,其中TicketPricesID = 3」,CON)

com.Parameters.Add( 「@ TicketPricesID」,SqlDbType.Int)。價值= TxtID.Text

昏暗的適配器作爲新的SqlDataAdapter(COM)

Dim table As New DataTable() 

adapter.Fill(表)

If table.Rows.Count() > 0 Then 
     'which column to select 
     TextBox4.Text = table.Rows(0)(0).ToString() 
     ' return only 1 row 
     'which column to select 
     TextBox3.Text = table.Rows(0)(1).ToString() 
    Else 

     MessageBox.Show("NO Data Found") 

    End If 
End Sub