0

これは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アイテムまでしか増えませんでした)

4

2 に答える 2

2

サイズは確かに予約語*であり、括弧で囲む必要があります[size]。フィールド(列)の名前がわからないようなコードを作成する場合は、括弧が必要になると想定する方が常に安全だと思います。

* JetACEの予約語

于 2012-07-18T09:25:24.883 に答える
0

神様、問題は事前に作成されたデータベースにあり、列名にエラーがありました(組織ではなく組織)...

それを見つけるのに1週間以上かかったとは信じられません...

于 2012-07-29T13:50:25.303 に答える