0

vb.net を使用しています。Windows フォームから db テーブル "adwPays" に行を挿入したいと考えています。これは私のコードです: Dim CC, EngName, FreName, LanCode As String Dim DialCode As Integer

    CC = txtCC.Text
    EngName = txtEN.Text
    FreName = txtFN.Text
    LanCode = txtLC.Text
    DialCode = txtDC.Text


    Dim MyConn As New SqlConnection("Server=(local);Database=dbAjout;Integrated Security=True")
    Dim query As String
    query = "INSERT INTO adwPays (CC, Anglais,Francais,CodeLangue,IndicInter) VALUES ( ' " & CC & "','" & EngName & "','" & FreName & "','" & LanCode & "','" & DialCode & " ');"

    Dim cmd As New SqlCommand(query, MyConn)

    MyConn.Open()
    cmd.ExecuteScalar()
    MyConn.Close()

しかし、「System.Data.dllで「System.Data.SqlClient.SqlException」タイプの未処理の例外が発生しました

追加情報: 文字列またはバイナリ データは切り捨てられます。ステートメントは終了されました。"

助けはありますか?

4

2 に答える 2

0

このようなパラメーター化されたクエリを使用します

Dim query  = "INSERT INTO adwPays (CC, Anglais,Francais,CodeLangue,IndicInter) " & 
             "VALUES (@cc, @ename, @fname, @lan, @dial)"
Using MyConn = New SqlConnection("Server=(local);Database=dbAjout;Integrated Security=True")
Using cmd = New SqlCommand(query, MyConn)
    cmd.Parameters.AddWithValue("@cc", CC)
    cmd.Parameters.AddWithValue("@ename", EngName)
    cmd.Parameters.AddWithValue("@fname", FreName)
    cmd.Parameters.AddWithValue("@lan", LanCode)
    cmd.Parameters.AddWithValue("@dial", DialCode)
    MyConn.Open()
    cmd.ExecuteNonQuery()
End Using
End Using

パラメーター化されたクエリを使用すると、SQL インジェクションの問題を回避し、文字列と日付を囲む書式設定引用符からコマンド テキストをクリアし、必要に応じてフレームワーク コードが数値型の正しい小数点を渡すようにします。

また、SqlConnection と SqlCommand の周りにUsing ステートメントを追加して、オブジェクトが確実に閉じられて破棄されるようにしました。パラメータはすべて文字列として渡されます。データベース フィールドのいずれかがテキスト タイプでない場合、これは間違っている可能性があります。

于 2013-07-09T13:29:31.810 に答える