0

Accessにあるテーブルに行を挿入しようとしています。テーブルの名前はSiteで、SiteId(AutoNumber)とSiteName(Text)の2つの列があります。テストの目的で、Excelシートから値を取得し、次のコードを使用して値をSiteName列に挿入しようとしました...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim App As New Excel.Application
    Dim WB As Excel.Workbook = App.Workbooks.Open("C:\MyFile.xlsx")
    Dim WS As Excel.Worksheet = DirectCast(WB.Worksheets(2), Excel.Worksheet)
    App.Visible = False

    Dim Range As Excel.Range
    Range = WS.Range("A8")
    Dim cnn As New OleDbConnection(My.Settings.cnn)
    Dim cmd As New OleDbCommand("INSERT INTO Site(SiteName) VALUES(@SiteName)", cnn)
    cmd.Parameters.Add("@SiteName", OleDbType.Char).Value = Range.Value.ToString

    Try
        Using cmd.Connection
            cmd.Connection.Open()
            cmd.ExecuteNonQuery()
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
End Sub

cmd.Parameters行を削除して、Values('Test')のような単純な値を入力しても、挿入されません。コマンドを実行しても、コードにエラーはありません。なぜ値が機能しないのですか?Excelシートから返されるデータを確認しましたが、正常に機能します。Accessのテーブルに挿入できません。このインサートを使用すると、接続も正常に機能します...

Dim cmd As New OleDbCommand("INSERT INTO Site VALUES(@SiteName)", cnn)

クエリ値の数がフィールド数などと一致しないことがわかります。

4

1 に答える 1

2

値が挿入されます(少なくともほとんどの場合);)mdbの内容(出力フォルダー内!)を手動でチェックしたことがありますか?

mdbファイルをプロジェクトに追加しましたか?ファイルのプロパティウィンドウに移動し、「出力ディレクトリにコピー」を「なし」に設定します。

通常、ファイルを追加すると、「新しい場合はコピー」または「常にコピー」に設定されます。つまり、デバッガーでアプリを実行するたびに、プロジェクトディレクトリのmbdファイルがdebug / releaseフォルダーにコピーされ、既に内部にある(およびレコードを保存した)ファイルが上書きされます。

于 2012-11-22T15:10:33.597 に答える