0

私はSQLクエリ言語に不慣れで、vb.netを使用して非キーID列値を持つ行(SQL DBテーブル内)を削除する方法を理解しようとしています。たとえば、以下の表TESTでは次のようになります。

ID     Name 
1      x 
2      y 
3      z

ユーザーが名前の値を選択するWindowsフォームがありますが、コードを実行すると、

varchar"y"をintに変換できません。

これが私のコードの試みです:

Dim sConnectionString As String

sConnectionString = "Data Source=" + serverName + ";Initial Catalog=" + dbName + ";Integrated Security=SSPI;"

Dim objConn As New SqlConnection(sConnectionString)
objConn.Open()

Dim cmd As New SqlCommand

cmd.Connection = objConn
cmd.CommandText = "DELETE FROM TEST WHERE Name = y"

cmd.ExecuteNonQuery()

ありがとうございました!

4

3 に答える 3

4

名前列のタイプがvarcharの場合は、値を一重引用符で囲む必要があります

cmd.CommandText = "DELETE FROM TEST WHERE Name = 'y'" 

あなたの質問に対する完全な答えは次のようになります:

Dim sConnectionString As String 
sConnectionString = "Data Source=" + serverName + _
                     ";Initial Catalog=" + dbName + _ 
                     ";Integrated Security=SSPI;" 

Dim objConn As SqlConnection
Using(objConn = new SqlConnection(sConnectionString) 
    objConn.Open() 
    Dim cmd As New SqlCommand 
    cmd.Connection = objConn 
    cmd.CommandText = "DELETE FROM TEST WHERE Name = @name" 
    cmd.Parameters.AddWithValue("@name", txtName.Text)
    cmd.ExecuteNonQuery() 
End Using

ユーザーが削除する名前をテキストボックスに挿入し、この値をパラメーター化されたクエリに渡すことを想定しています。パラメータ化されたクエリを使用すると、見積もりの​​問題を処理する手間やSQLインジェクション攻撃から解放されます。

于 2012-08-21T13:38:52.363 に答える
3

これを行うと、すべての行が削除さWHERE Name = yれ、おそらくそれを実行したくないでしょう。

UIで名前を使用する必要がありますが、IDをSQLに渡します。

その名前のすべての行を本当に削除したい場合は、yの周りに引用符を付けます。引用符がないと、yという名前の列が検索されます。

DELETE FROM TEST WHERE Name = 'y'

于 2012-08-21T13:39:58.980 に答える
0

cmd.CommandText = "DELETE FROM TEST WHERE Name = y";

代わりにこれを使用できます

cmd.CommandText = "DELETE FROM TEST WHERE ID =" + idValue;

ここで、「idValue」はユーザーから取得するIDです。

もしくはそうでないか

cmd.CommandText = "DELETE FROM TEST WHERE Name ='y'";

于 2012-08-21T14:02:59.950 に答える