0

アクセス データベースに挿入しようとしていますが、PK は DB によって生成される自動番号です。挿入ステートメントの構文エラーが発生しましたが、その理由がわかりません。可能であれば、同じステートメントで自動番号の値を返したいと思います。

これが私がこれまでに得たものです。

   Dim cn As OleDbConnection
    Dim cmd As OleDbCommand
    Dim str As String

    Try
        cn = New OleDbConnection("Provider=microsoft.Jet.OLEDB.4.0;Data Source=G:\Sean\BMSBonder3_0.mdb;")
        cn.Open()
        str = String.Format("Insert into Bonder(BonderName, BonderConfig, Date, User) values ('{0}', '{1}', '{2}', '{3}')", addBonder.BonderName _
                    , xmlString, Date.Now.ToString, Environment.UserName)
        MsgBox(str)
        cmd = New OleDbCommand(str, cn)
        cmd.ExecuteNonQuery()
        cn.Close()

    Catch ex As Exception
        MsgBox(ex.Message)
        Return False
    End Try

    Return Nothing

明らかにVB.Netでのコーディング。クエリでは、autonumber フィールドを除くすべてのフィールド値が設定されています。

4

3 に答える 3

5

Date と User が予約語であるため、ドーナツに問題があることを確信しています。それらを角括弧で囲みます。

str = String.Format("Insert into Bonder(BonderName, BonderConfig, [Date], [User]) ....

できれば、データベース内のフィールドの名前を予約語以外に変更して、これ以上の頭痛の種を避けてください。

于 2010-02-18T01:12:36.810 に答える
1

行にブレークポイントを置く

cmd.ExecuteNonQuery()

str の値を Access クエリ ウィンドウにコピーし、そこからクエリを実行します。Access クエリ ウィンドウで問題が特定される場合があります。

Access に日付を挿入する場合は、日付の両側にハッシュを付ける必要があります。したがって、値:

Date.Now.ToString

になります:

"#" & Date.Now.ToString("yyyy-mm-dd") & "#"
于 2010-02-18T01:16:26.133 に答える
0

ハードコードのコメントに加えて、Access の日付の区切り文字はハッシュです (これは hawbsl によって言及されていることがわかりました)。

 "Insert into Bonder(BonderName, BonderConfig, Date, User) values ('{0}', '{1}', #{2}#, '{3}')

番号を取得するには、同じ接続で 2 番目のステートメントが必要です。

SELECT @@identity
于 2010-02-18T01:19:45.450 に答える