挿入コマンドのOLEパラメータ化

現在の進行方向:

これは更新されたコードです:

sql = "INSERT INTO Strings (String_Name, Long_Text, Short_Text, Alternate_Text, Multi_String_ID, Lang_ID) VALUES (?,?, ?,?,?,?)"

Dim command = New OleDbCommand(sql, pConn)

command.Parameters.AddWithValue("@webStringName", "String_Name")
command.Parameters.AddWithValue("@webLang_String", "Long_Text")
command.Parameters.AddWithValue("@ptsShortText", "Short_Text")
command.Parameters.AddWithValue("@webAltText", "Alternate_Text")
command.Parameters.AddWithValue("@webMultiStringID", "Multi_String_ID")

上記の行がこれに変更されました...     command.Parameters.AddWithValue( "@ webMultiStringID"、OleDbType.Integer).Value = webMultiStringID

command.Parameters.AddWithValue("@webLang_Code", "Lang_ID")

command.ExecuteNonQuery()

POST開始:

私は作成し、OLEアダプタとステートメントを挿入しようとしています。私はparamtersmなしで働いていましたが、今はparmsを追加しようとしていて、構文に問題があります。ハ

これまでのコードはここにあります...

command = New OleDbCommand(sql, pConn)

sql = "INSERT INTO Strings (String_Name, Long_Text, Short_Text) VALUES (?,?, """ & ptsShortText & """)"


command.Parameters.Add("@webStringName", OleDbType.VarChar, 250, "String_Name")
command.Parameters.Add("@webLang_String", OleDbType.VarChar, 250, "Long_Text")

command = New OleDbCommand(sql, pConn)
command.ExecuteNonQuery()

パラメータ化された最初の2つの変数を取得しようとしました。

どんな提案も大歓迎です。

編集:固定SQL

0
なぜすべての方法を行って3つのパラメータすべてをパラメータ化しないのですか?
追加された 著者 Meta-Knight,

1 答え

あなたは何か間違っている。最初にパラメータを追加します。

command.Parameters.Add("@webLang_String", OleDbType.VarChar, 250, "Long_Text")

コマンドを新しいパラメータに置き換えます(パラメータなし)。

command = New OleDbCommand(sql, pConn)

したがって、この行のすべての既存のパラメータを削除します。それがうまくいかない理由です。


あなたは正しい順序でそれをしなければなりません:

sql = "INSERT INTO Strings (String_Name, Long_Text, Short_Text) " & _
      "VALUES (?,?, """ & ptsShortText & """)"

Dim command = New OleDbCommand(sql, pConn)  ' First create the command

' Then add the parameters to the command
command.Parameters.AddWithValue("@webStringName", "String_Name")
command.Parameters.AddWithValue("@webLang_String", "Long_Text")

' Then execute the command. (DON'T recreate it with New OleDbCommand here,
' that would throw away all you've done so far.)
command.ExecuteNonQuery()
2
追加された
@ marc11h:はい、私はあなたが間違っていたことを教えようとしていますし、なぜそれはうまくいかないのですか。 ;-)私はあなたに実用的なソリューションを示すために私の答えを広げました。
追加された 著者 Heinzi,
@ marc11h:パラメータをIntegerとして宣言すると、文字列を割り当てることはできません(最低でも、文字列を整数に変換する必要はありません)。 (a)データベースフィールドにどのようなデータ型があるか、(b)変数にどのような.NETデータ型(たとえば webMultiStringID )があるのか​​という質問で指定した方が簡単かもしれません。データ型は一致する必要があります。
追加された 著者 Heinzi,
私が理解しているかわからない、あなたのコードはまさに私が持っているものです。
追加された 著者 htm11h,
私はただ1つのエラーメッセージを取得しています:データ型の不一致が条件式にあります。リストには1つの整数しかありません。元のコードを更新します。
追加された 著者 htm11h,
私はそれを修正した、あなたの助けに感謝します。私は変数に値を割り当てなければなりませんでした。修正を反映するために投稿を更新します。
追加された 著者 htm11h,