1

VS Express 2012、SQL Server 2012 を使用しています。1 つのテーブル (コンピューター) と 10 列 (HaHu_ID、Serial_Number、Brand、Model、OS、Processor、HDD、Memory、ST、Speed) を持つ 2 つの行があります。

私はこのサイトで、SQL Server への vb.net インターフェイスを作成しようとして、できるだけ多くの投稿を読んでいます。それらを接続し、値を DataGridView テーブルに返すことに成功しました

SELECT * FROM computers

しかし、次のような他のコマンドを試したとき

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

空の DataGridView 行を返します。「HaHu_ID」をランダムなものに変更しようとしましたが、それでも空の行が返されました。正しい列名が表示されますが、行はすべて空です。

別のコマンド「SELECT 'HaHu_ID', 'Brand' FROM computers」を試したところ、次のように返されました。

Column1---|--Column2

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

列名は「Column1 and column2」に変更されており、ご覧のとおり、行は列名であるべきもので満たされています! イライラして、「SELECT 'HaHu'、'Brand_ID' FROM computer」(データベースに存在しない列) を試したところ、次のように返されました。

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

一重引用符は、文字または文字列を指定するためのものです。次の SQL ステートメントは、文字列 'HaHu_ID' と文字列 'Brand' を選択し、コンピューター テーブルにあるすべてのレコードを返します。また、エイリアスが割り当てられていないため、サーバーはデフォルトの Column1、Column2 などを返します。

SELECT 'HaHu_ID', 'Brand' FROM computers

列名をエスケープするには、次のように角括弧を使用します。

SELECT [HaHu_ID], [Brand] FROM [computers]
于 2013-04-05T20:01:19.580 に答える
1

列名を一重引用符で囲まないでください。WHERE HaHu_ID = '101' は正しいです。

于 2013-04-05T19:52:48.057 に答える
0

2 つの文字列を比較しています。

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

試す:

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

(数値ではなく文字型の列であると仮定)

于 2013-04-05T20:13:25.677 に答える