2011-10-30 20 views
1

私のデータベースのテキストボックス内のテキストを探したいと思います。私は以下のコードを書いた。それは数字をうまく見つけますが、文字列を見つけたいときに実行時エラーが発生します:invalid column name for example aaaが、テーブルのcolumn1にaaaが存在します。データベース内の入力文字列を見つける方法

この問題についてどう思いますか?あなたが送ったSQL文がTextBox1.Text値を区切るされていないので、あなたがこのSQLで終わるようだ

cmd = New SqlCommand("select * from tbl where column1=" + TextBox1.Text) 
    cmd.CommandType = CommandType.Text 
    cmd.Connection = cnn 
    dad.SelectCommand = cmd 
    cmd.ExecuteNonQuery() 
    dad.Fill(ds) 
    dgv.DataSource = ds.Tables(0) 
+0

このようにコードをデプロイすると、誰かがあなたのデータベースをpwnするまで、それは時間の問題です。 –

答えて

3

select * from tbl where column1 = aaa

とSQL Serverの扱いaaa列名として。

かかわらず、その、あなたは、SQLインジェクション攻撃を避けるためにSqlParameterを使用する必要があります。

cmd = New SqlCommand("select * from tbl where [email protected]") 
cmd.CommandType = CommandType.Text 
cmd.Paramaters.AddWithValue("@value", TextBox1.Text) 

VBが私の第一言語ではないので、構文は少しオフかもしれませんが、あなたが作ることができるはずですそれは働く。

1

アドライトは正しいですが、一重引用符で囲む必要があります。また、一重引用符は含まれていないため、すべてがうまくいきます。

言われているように、あなたのアプリケーションをデータベースに対して古くなった、古い方法でコードを使用しています。

あなたが決定的LINQテクノロジで深く見ている必要がありますあなたが開いたり閉じたりするには接続していない

  • :あなたが引用符に対処する必要はありません
  • その自動を、CRLFとコンマ
  • あなたはSQL攻撃を危険にさらすしないでください:クエリがLINQエンジンによってパラメータ化されている
  • あなたは、データベース・オブジェクトagaintsインテリセンスの恩恵を受ける:テーブル、ビュー、列
  • データソースとして使用すると、簡単な結果が得られます。
  • INSERT文とUPDATE文では、トランザクションは自動的に有効になります。

例:

using ctx as new dataContext1 
    dim result = from r in ctx.tbl 
    where r.column1 = textBox1.text 

    dgv.datasource = result.tolist 
end using 

インテリセンス: "CTX" を

  • あなたが入力し、あなたが使用可能なテーブルの一覧が表示されます!
  • 「r」と入力するとテーブル(またはvieww)に含まれる列のリストが表示されます。

LINQは学ぶのが難しくありません.LINQはWeb上で、ここやそこにあなたを助けるたくさんの例があります。

LINQ SQLのような構文を使用して、XMLデータ、CSVファイル、Excelスプレッドシート、フォーム内のコントロール、またはASP.NETのHTML DOMドキュメントをクエリできます。

関連する問題