1

プロジェクトにアクセス データベースをデータソースとして追加しました。したがって、自動的に生成された tableadapters クラスを取得し、接続文字列を含むテーブル アダプター インスタンスにアクセスします。これを使用してデータベースへの接続を開いているので、最初にいくつかのレコードを削除してから、それらを新しいレコードに置き換えることができます。.executenonquery影響を受ける行が返されるため、クエリは機能しているようです。delete *念のためコマンドも試してみました。しかし、データベースを開くと、すべてが同じです。その理由についていくつかのアイデアがありました。プロジェクトのデータ ディレクトリへの汎用ポインタが含まれているため、tableadapter によって返される接続文字列は間抜けかもしれないと思いました。

プロバイダー=Microsoft.Jet.OLEDB.4.0;データ ソース=| DataDirectory |\DupeMDB.mdb;Persist Security Info=True

また、ビルド アクションまたは出力ディレクトリへのコピーに問題があるのではないかと考えました。この 2 つの背後にあるメカニズムがよくわかりません。出力ディレクトリへのコピーが原因である可能性があると思います。

これが私の目標です。このプロジェクトを秘書に展開して、彼女がプログラムを使用して重複レコードリストなどを処理できるようにしたいと考えています。データはプログラムと一緒に移動する必要があります。この.mdfファイルを配置と一緒にパッケージ化し、彼女が作業を終えたときにそれを返したいと考えています。私はここで終わりに近づいています(テーブルに書き戻します)。テーブルが更新されない理由を知っている人はいますか?

    Dim Connector As DupeTblTableAdapter = New DupeTblTableAdapter
    Dim Conn As New System.Data.OleDb.OleDbConnection
    Conn = Connector.Connection
    Conn.ConnectionString = Connector.Connection.ConnectionString
    MsgBox(Conn.ConnectionString)
    Dim Comm As System.Data.OleDb.OleDbCommand

    Conn.Open()
    For Each DR In DeleteRecords
        Comm = New System.Data.OleDb.OleDbCommand($"DELETE from DupeTbl where DupeTbl.CUST_NO={DR.ToString}", Conn) '
        Dim aff As Integer = Comm.ExecuteNonQuery
        'MsgBox(aff)
        Comm = Nothing
    Next
    For Each RR In ReplaceRecords
        Comm = New System.Data.OleDb.OleDbCommand($"INSERT INTO DupeTbl ( CUST_NO, PREDIR, POSTDIR, SUFFIX, CUSTSIZE, AddFlag, IgnoreRecord ) VALUES ({RR.Cust_No}, '{RR.PreDir}', '{RR.PostDir}', '{RR.Suffix}', {RR.Size}, {RR.AddFlag}, {RR.Ignore});", Conn)
        Comm.ExecuteNonQuery()
        Comm = Nothing
    Next

    Conn.Close()
4

2 に答える 2

0
   Dim Connector As DupeTblTableAdapter = New DupeTblTableAdapter
    Dim Conn As New System.Data.OleDb.OleDbConnection
    Conn = Connector.Connection
    Conn.ConnectionString = Connector.Connection.ConnectionString
    MsgBox(Conn.ConnectionString)
    Dim Comm As System.Data.OleDb.OleDbCommand

    Conn.Open()
    For Each UR In UpdateRecords
        Comm = New System.Data.OleDb.OleDbCommand($"UPDATE DupeTbl  SET CUST_NO = <NewValue>, PREDIR = <NewValue, POSTDIR = <NewValue> etc. where DupeTbl.CUST_NO={DR.ToString}", Conn) '
        Dim aff As Integer = Comm.ExecuteNonQuery
        'MsgBox(aff)
        Comm = Nothing
    Next

    Conn.Close()
于 2015-09-22T13:27:55.207 に答える
0

このような場合の問題は、通常、ビルドごとに作業データベースが上書きされることです。プロジェクトにローカル データ ファイルを追加すると、プロジェクト フォルダーにソース ファイルとして追加されます。デフォルトでは、Copy to Output Directoryプロパティは に設定されていCopy Alwaysます。つまり、プロジェクトをビルドするたびに (デフォルトでコードを変更してプロジェクトを実行するたびに発生します)、ソース ファイルが出力フォルダーの作業データベースの上にコピーされ、変更が消去されます。デバッグ中に作成しました。これを防ぐには、そのプロパティをCopy if Newerに変更します。これは、スキーマを変更するなど、ソース データベースに変更を加えた場合にのみ作業データベースが上書きされることを意味します。

于 2015-09-22T22:58:53.667 に答える