これはaspではなく、私が作成しようとしている通常のローカルデータベースプログラムです。
私はこの編集サブを持っています:
Protected Sub update()
Dim sqlString As String
Dim pair_0f_attribute As ArrayList = buildSqlUpdate()
sqlString = "UPDATE " & getSharedTableName() & " SET "
sqlString = sqlString & String.Join(", ", pair_0f_attribute.ToArray)
sqlString = sqlString & " WHERE UID = " & id
cmd = New OleDbCommand(sqlString, conn)
cmd.CommandType = CommandType.Text
ExecuteNonQuery(cmd)
End Sub
INSERTコマンドでエラーが発生します。私はこの巨大な挿入を分解しました(70以上の列を取得しました。データベースの2000以上の行すべてに対して手動で実行したくありません)。一度に1つの値のみを取得し、失敗する場所を確認します。
Public Sub editrow(ByVal ID As Integer, ByVal ColumnName As String, ByVal value As Object)
Dim SqlString As String = "Update " & getSharedTableName() & " Set " & ColumnName & " = ? Where UID = " & ID
Dim cmd As New OleDbCommand(SqlString, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.AddWithValue(ColumnName, value)
ExecuteNonQuery(cmd)
End Sub
これは、文字列であるユーザー名、整数であるレベル、整数であるxpなどで機能します。いくつかの挿入では、8日に突然、Insertステートメントでエラーが発生します。
ColumnNameが"Size"ですが、これを "MSize"に変更しようとしましたが、それでもエラーが発生し、値は"Medium"です。
文字列wokrsも使用するcolumnname"UserName"の場合、なぜこれが失敗するのでしょうか。
dbを確認しましたが、フィールドSize(現在はMSize)がTextに設定されており、デフォルト値はありません。nullにすることができ、最大長は255です。DBのどのフィールドでもフォーマットや検証または正規表現は使用されていません...
誰かがこれを修復するためにどのように進めるべきかについて何かヒントがありますか?
** 編集
ここでbuildSqlUpdate()を使用しました:
Private Function buildSqlUpdate() As ArrayList
Dim pair_arraryList As New ArrayList
For Each element As KeyValuePair(Of String, Object) In attributes
pair_arraryList.Add("[" & element.Key & "] = '" & element.Value & "'")
Next
Return pair_arraryList
End Function
質問する前に;)属性は、オブジェクトの新しいインスタンスを作成するときに実行時に値が入力された辞書に格納されたDB列名であり、挿入前の文字列(長すぎても)です。 )私がそれをチェックすると、うまく構築されているようです。
** * **編集** * **
Remouが提案したようにブラケットを追加しましたが、同じエラーは発生しません... 1番目のインサート(完全に構築されたもの)を使用すると、このエラーが発生します:
(次の式の構文エラー(演算子なし):....いくつかの文字列値...。
editrowを使用する場合、エラーは発生しません(ただし、その長い...約2分かかり、2kのうち125アイテムまでしか増えませんでした)