1

我正在使用 VS Express 2012、SQL Server 2012。我有一张表(计算机)和两行 10 列(HaHu_ID、Serial_Number、品牌、型号、操作系统、处理器、硬盘、内存、ST、速度)。

我一直在这个网站上阅读尽可能多的帖子,试图创建一个到 SQL Server 的 vb.net 接口。我成功连接它们并将值返回到 DataGridView 表

SELECT * FROM computers

但是当我尝试其他命令时

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

它返回一个空的 DataGridView 行!尝试将“HaHu_ID”更改为随机的,但它仍然给了我空行。显示了正确的列名,但行全部为空。

当我尝试另一个命令“SELECT 'HaHu_ID', 'Brand' FROM computer”时,它返回:

Column1---|--Column2

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

列名已更改为“Column1 和 column2”,如您所见,行中填满了应该是列名的内容!沮丧的我尝​​试了“从计算机中选择'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语句完美运行,但是一旦我尝试其他方法,它就不起作用了。

这是为什么?谢谢。

4

5 回答 5

1

不要在列名周围加上单引号。WHERE HaHu_ID = '101' 是正确的。

于 2013-04-05T19:52:48.057 回答
1

单引号用于指定字符或字符串。以下 SQL 语句选择字符串“HaHu_ID”和字符串“Brand”,并返回您在计算机表中的每条记录。由于没有指定别名,服务器返回 Column1、Column2 等的默认值。

SELECT 'HaHu_ID', 'Brand' FROM computers

要转义列名,请使用方括号,如下所示:

SELECT [HaHu_ID], [Brand] FROM [computers]
于 2013-04-05T20:01:19.580 回答
0

对,您正在比较两个字符串:

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

尝试:

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

(假设它是字符类型列而不是数字)

于 2013-04-05T20:13:25.677 回答
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 computer”会为您返回什么?

于 2013-04-05T21:42:56.767 回答
0

Private Sub TxtID_TextChanged(sender As Object, e As EventArgs) 处理 TxtID.TextChanged

暗淡为新的 My_Ticket_MachineDataSet

'连接设置

Dim con As New SqlConnection(" Data Source=LEES-PC;Initial Catalog=My Ticket Machine;Integrated Security=True")

'选择哪一行

Dim com As New SqlCommand("select * from FareChartTest where TicketPricesID = 3", con)

com.Parameters.Add("@TicketPricesID", SqlDbType.Int).Value = TxtID.Text

暗淡适配器作为新的 SqlDataAdapter(com)

    Dim table As New DataTable()

适配器.填充(表)

    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
于 2017-07-18T08:30:51.290 回答