0

VB ボタンを使用してデータベースにデータを挿入しようとしていますが、例外として設定したエラー メッセージが表示され続けます。

なぜこれがデータベースを更新しないのか、誰か助けてもらえますか?

   Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click

    Dim connetionString As String
    Dim sqlCnn As SqlConnection
    Dim sql As String
    Dim adapter As New SqlDataAdapter
    Dim Customer As String = TextBox1.Text
    Dim Product As String = TextBox2.Text
    Dim Location As String = TextBox3.Text
    Dim Details As String = TextBox4.Text
    Dim Owners As String = DropDownList1.Text
    Dim Urgency As String = DropDownList2.Text


    connetionString = "Data Source=ZUK55APP02;Initial Catalog=BugFixPortal;User ID=SLC***;Password=rep***"
    sql = "INSERT INTO Requests (Owner, Customer, Product, Location, Urgency, Details) VALUES ('" & Owners & ", " & Customer & ", " & Product & ", " & Location & ", " & Urgency & ", " & Details & "')"
    sqlCnn = New SqlConnection(connetionString)

    Try
        sqlCnn.Open()
        adapter.UpdateCommand = sqlCnn.CreateCommand
        adapter.UpdateCommand.CommandText = sql
        adapter.UpdateCommand.ExecuteNonQuery()
        sqlCnn.Close()

    Catch ex As Exception
        MsgBox("Unable to update Database with Request - Please speak to Supervisor!")

    End Try

End Sub
4

5 に答える 5

2

あなたのコードはSQLインジェクションに弱いので、私はこの道を進むことはありません

代わりにパラメータを使用する必要があります。次のようなもの

c.Open();
string insertString = @"insert into YourTable(name, street, city,....) values(@par1,  @par2, @parN,....)"
SqlCommand cmd = new SqlCeCommand(insertString, c);
cmd.Parameters.Add("@par1", SqlDbType.VarChar).Value = "MyName";
//etc
cmd.ExecuteNonQuery();
c.Close();
于 2012-05-25T16:35:59.540 に答える
1

これを変える;

MsgBox("Unable to update Database with Request - Please speak to Supervisor!")

このようなものに;

MsgBox("Unable to update Database with Request - Please speak to Supervisor!" & ex.Message)

例外の詳細がわかりますが、一目で問題がわかります。挿入しようとしている値は文字列です。すべての値を、それぞれを囲むのではなく、単一の文字セットで囲んでいます。 '値のペアの文字列パラメータ、すなわち

sql = "INSERT INTO Requests (Owner, Customer, Product, Location, Urgency, Details) VALUES ('" & Owners & "', '" & Customer & "', '" & Product & "',' " & Location & "', '" & Urgency & "', '" & Details & "')"
于 2012-05-25T16:34:46.123 に答える
1

SQLインジェクション攻撃に対して広くオープンであるため、クエリのパラメータ化を実際に検討する必要があります。こちらをご覧ください

コード自体に関しては、各値の前後にアポストロフィを付ける必要があるため、SQL構文が間違っています。これを試して:

sql = "INSERT INTO Requests (Owner, Customer, Product, Location, Urgency, Details)
VALUES ('" & Owners & "', '" & Customer & "', '" & Product &
     "', '" & Location & "', '" & Urgency & "', '" & Details & "')"

パラメータを使用した例を次に示します

sql = "INSERT INTO Requests (Owner, Customer, Product, Location, Urgency, Details)
VALUES ('@Owners', '@Customer', '@Product', '@Location', '@Urgency', '@Details')"

次に、次のようなパラメータを追加します。

command.Parameters.AddWithValue("@Owners", Owners)
command.Parameters.AddWithValue("@Customer", Customer)
command.Parameters.AddWithValue("@Product", Product)
command.Parameters.AddWithValue("@Location", Location)
command.Parameters.AddWithValue("@Urgency", Urgency)
command.Parameters.AddWithValue("@Details", Details)
于 2012-05-25T16:34:46.450 に答える
1

あなたは自分の価値観を間違って引用しています。

この文字列には、すべての値が一重引用符で囲まれていますが、これは正しくありません。

VALUES ('" & Owners & ", " & Customer & ", " & Product & ", " & Location & ", " & Urgency & ", " & Details & "')" 

代わりに、文字データを一重引用符で囲みます。たとえば、Productが varchar の場合、次のようになります。

VALUES (" & Owners & ", " & Customer & ", '" & Product & "', " & Location & ", " & Urgency & ", " & Details & ")" 

ただし、実際の問題は、代わりにパラメーター化されたクエリを使用する必要があることです。このコードは、SQL インジェクション攻撃を受けやすいです。

于 2012-05-25T16:32:21.273 に答える
0

adapter.InsertCommand代わりに使いたいと思いますadapter.UpdateCommand

Try
    sqlCnn.Open()
    adapter.UpdateCommand = sqlCnn.CreateCommand //(adapter.InsertCommand)
    adapter.UpdateCommand.CommandText = sql //(adapter.InsertCommand)
    adapter.UpdateCommand.ExecuteNonQuery() //(adapter.InsertCommand)
    sqlCnn.Close()

Catch ex As Exception
    MsgBox("Unable to update Database with Request - Please speak to Supervisor!")

End Try

パラメータ化されたSQLクエリに同意します

詳細については、 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.aspxを参照してください

于 2012-05-25T16:46:44.957 に答える