如何解决Visual Studio中的数据集和数据库连接问题?

如何解决如何解决Visual Studio中的数据集和数据库连接问题?

我正在将VB.NET与MS Access数据库一起使用。有两个相互关联的表。

我遵循以下步骤与数据集和绑定源建立数据库连接。

  1. 数据源下添加新的数据源
  2. 数据库作为数据源类型
  3. 数据集作为数据库模型>>
  4. 选择数据连接
  5. 数据库对象下,我选择了想要客户表等目的的表,也单击了视图
  6. 然后完成。
  7. 现在位于数据源,选择数据集,然后选择客户表,然后将详细信息和数据网格视图拖动到表单中,并添加用于添加的按钮,删除更新记录。
  8. 现在运行该应用程序。

运行应用程序后,它不是从/记录查看添加更新删除记录到数据库。

用于将记录添加到数据库的代码

CustomersBindingSource.AddNew()

用于将记录更新到数据库的代码

CustomersBindingSource.EndEdit()
CustomersTableAdapter.Update(SrsbdbDataSet.Customers)

用于从数据库中删除记录的代码

CustomersBindingSource.RemoveCurrent()

我还编辑了app.config文件中的连接字符串,以检查连接字符串问题,但对该问题没有帮助。

请让我知道我在哪里做错了。

解决方法

CustomersBindingSource.AddNew()

这不会在访问数据库中添加记录 ,而是将记录添加到BindingSource的列表中(当在BindingSource上调用EndEdit时)将其推入YourDataSetName.Customers DataTable作为新的DataRow-如果要查看YourDataSetName.Customers中的所有行,您会发现其中有些行(可能是在启动应用程序时从数据库下载的),并且其中有{{3} },然后添加了一个新数据,其中DataRowState已添加

尚未将任何内容保存到数据库。该数据仅在数据集的数据表中为 ,该数据表是数据库表的客户端表示。它本身不是数据库表。它当然可以比数据库表具有更多或更少的列和不同类型。它只是数据库数据的临时存储;您可以下载,添加,更改,删除,也许保存等。相关的DataRow会跟踪您对数据所做的所有操作,并记录是否已添加/修改/删除/未更改等

TableAdapter是在DataTable和数据库之间来回推送数据的东西

要将数据保存到数据库时,请致电CustomersTableAdapter.Update()。命名Update代表Microsoft是一个废话,因为它使人们认为它仅执行SQL UPDATE查询;如果它被称为SaveChanges(后来是EF;使用EF的SaveChanges),它将更加清晰。。您只需要记住一个-“更新即保存”

因此,您调用Update(datatable or dataset here)并将其所有修改/删除/添加的行传递给DataTable。 TableAdapter逐行扫描整个DataTable,查看每行的DataRowState。如果已添加,则TableAdapter将调用其内置的INSERT SQL查询以保存行。如果已修改,则执行SQL UPDATE。删除状态会导致SQL DELETE。数据行知道下载的原始数据和现在的数据。有时候这对于确定是否有人在我们拥有该行时保存了这一行至关重要,因此我们可以避免用我们的行覆盖他们的更改

在此过程结束时,已保存数据,所有行状态都从其原来的状态设置为Unchanged(因为现在数据库中的数据相同,因此不再需要保存行数据)。

在编辑文件时,过程的这一部分就像在文本编辑器选项卡上显示的小*一样-处于“已添加/已修改/已删除”状态的数据行具有未保存的更改,需要保存。保存后,状态返回到未更改。我是否提到过TableAdapter.Update应该被称为“保存”?


总而言之,保存的过程将是要求编辑控件进入EndEdit(),然后将相关的绑定源请求到EndEdit-这样可确保我们拥有一个已提交并准备保存所有更改的数据表,然后呼叫tableadapter.Update。用户输入的可能控件在失去焦点时会提交其编辑内容,因为用户单击“保存”按钮即可。但是调用endedit可以确保。如果您不确定,请创建一个新表单,将其上的DataGridView放到“数据源”窗口之外,然后查看保存按钮的连线方式-从内存中执行Validate,EndEdits和UpdateAll(TableAdapterManager,管理TableAdapter,以正确的顺序对其进行调用,以确保父行保存在子行之前


如果您开始进行更多修改,则行状态将再次更改,但是就像以前一样,将更改提交到数据库的是TableAdapter.Update(),无论您进行了哪种更改


这里要注意的最后一件事是Access是基于文件的数据库。可能您的项目位于例如:

C:\projects\accesswhatever\

例如,您可以访问数据库您的桌面:

c:\users\you\desktop\access.mdb

当您将访问数据库连接到事物中时,VS会显示一个冗长而冗长的对话框(没有人会读到;)),它基本上说“ ”,我会将数据库放入您的项目中,然后在构建时将其复制到bin文件夹中。

因此,单击“确定”而不考虑其后果,然后进行构建。您的磁盘现在看起来像:

 C:\users\you\desktop\access.mdb                            'call it DB X
 C:\projects\accesswhatever\access.mdb                      'call it DB Y
 C:\projects\accesswhatever\bin\debug\access.mdb            'call it DB Z

您正在运行的程序会将数据保存在最后一个数据库DB Z中。每次构建时(如果您更改代码,每次单击播放都会发生这种情况),Visual Studio会删除Z并将Y复制到Z。 / p>

您现在真的很困惑;您的代码表示正在保存。您正在桌面上查看DB X,还是在项目库中查看DB Y,想知道这些数据到底在哪里?

它位于DB Z中,位于app.exe旁边的bin\debug文件夹中-请记住,每次构建时,VS都会擦除已更改的数据库,并从很早以前就将其替换为干净的数据库。如果要更改此设置,请在解决方案资源管理器中单击数据库,然后将“复制到输出”从“始终复制”设置为“如果更新则复制”。现在,它仅在您更改模式时才会复制,因此。.添加一个新表,然后VS将使用一个新表擦除您精心策划的测试数据库。.但更像是OK,因为新的空数据库至少具有您的程序将崩溃时没有:)的额外表

,

另一种方法是直接在DataGridView中添加新记录,并使用新的OleDbDataAdapter进行连接。

删除“ CustomersBindingSource.AddNew()”,然后在DataGridView中编辑记录:

enter image description here

“更新记录”按钮中的代码。

Private Sub Button2_Click(sender As Object,e As EventArgs) Handles Button2.Click
    Dim connstring = "your connection string"
    Dim adapter As OleDbDataAdapter = New OleDbDataAdapter("select * from Customer",connstring)
    Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter)
    builder.QuotePrefix = "["
    builder.QuoteSuffix = "]"
    adapter.Update(CustomerDataSet.Customer)

End Sub

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-