查询似乎有效,但实际上并不影响 Access 数据库
Queries appear to work, but don't actually affect Access database
我已将访问数据库作为数据源添加到我的项目中。因此,我获得了自动生成的 table 适配器 class,因此可以访问包含连接字符串的 table 适配器实例。我正在使用它来打开与我的数据库的连接,这样我就可以先删除一些记录,然后用新记录替换它们。
查询似乎有效,因为 .executenonquery
确实 return 受影响的行。我什至尝试了 delete *
命令来确定。但是,当我打开数据库时,一切都是一样的。
我有一些想法,为什么。我认为由 table 适配器编辑的连接字符串 return 可能很愚蠢,因为它包含指向项目数据目录的通用指针。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DupeMDB.mdb;Persist Security Info=True
我还以为我在生成操作或复制到输出目录时遇到了问题。我真的不明白这两件事背后的机制。我想也许复制到输出目录的事情可能是罪魁祸首。
这是我的目标。我想将这个项目部署给我的秘书,这样她就可以使用该程序来处理重复的记录列表等。数据必须与程序一起使用。我想将此 .mdf 文件与部署打包在一起,并在她完成后从她那里取回。我已经接近尾声了(回信 table)。有谁知道为什么 table 不会更新?
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()
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()
这种情况下的问题通常是工作数据库在每次构建时被覆盖。将本地数据文件添加到项目时,它会作为源文件添加到项目文件夹中。默认情况下,Copy to Output Directory
属性 设置为 Copy Always
。这意味着每次构建项目时,每次更改代码时都会发生这种情况,默认情况下 运行 项目,源文件将被复制到输出文件夹中的工作数据库的顶部,因此清除您在调试时所做的任何更改。为防止这种情况,将 属性 更改为 Copy if Newer
,这意味着只有在对源数据库进行更改时才会覆盖工作数据库,例如修改架构。
我已将访问数据库作为数据源添加到我的项目中。因此,我获得了自动生成的 table 适配器 class,因此可以访问包含连接字符串的 table 适配器实例。我正在使用它来打开与我的数据库的连接,这样我就可以先删除一些记录,然后用新记录替换它们。
查询似乎有效,因为 .executenonquery
确实 return 受影响的行。我什至尝试了 delete *
命令来确定。但是,当我打开数据库时,一切都是一样的。
我有一些想法,为什么。我认为由 table 适配器编辑的连接字符串 return 可能很愚蠢,因为它包含指向项目数据目录的通用指针。
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\DupeMDB.mdb;Persist Security Info=True
我还以为我在生成操作或复制到输出目录时遇到了问题。我真的不明白这两件事背后的机制。我想也许复制到输出目录的事情可能是罪魁祸首。
这是我的目标。我想将这个项目部署给我的秘书,这样她就可以使用该程序来处理重复的记录列表等。数据必须与程序一起使用。我想将此 .mdf 文件与部署打包在一起,并在她完成后从她那里取回。我已经接近尾声了(回信 table)。有谁知道为什么 table 不会更新?
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()
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()
这种情况下的问题通常是工作数据库在每次构建时被覆盖。将本地数据文件添加到项目时,它会作为源文件添加到项目文件夹中。默认情况下,Copy to Output Directory
属性 设置为 Copy Always
。这意味着每次构建项目时,每次更改代码时都会发生这种情况,默认情况下 运行 项目,源文件将被复制到输出文件夹中的工作数据库的顶部,因此清除您在调试时所做的任何更改。为防止这种情况,将 属性 更改为 Copy if Newer
,这意味着只有在对源数据库进行更改时才会覆盖工作数据库,例如修改架构。