【问题标题】:How to connect to an Access database using the OleDb namespace in .NET?如何使用 .NET 中的 OleDb 命名空间连接到 Access 数据库?
【发布时间】:2010-12-24 13:51:11
【问题描述】:

我想为我的 Windows 窗体应用程序使用 Access 数据库。 (用 C# 编写)
我使用 OleDb 命名空间进行连接,并且可以使用 OleDbConnectionExecuteReader 对象从源中选择记录。
但是,我还不能插入、更新或删除记录。

我的代码如下:

 OleDbConnection con = new OleDbConnection(strCon);

 try
 {
     string con="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xyz.mdb;Persist Security Info=True";

     con.Open();

     OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID, DPName, ClientID, ClientName) VALUES('53', 'we', '41', 'aw')", con);

     int a = com.ExecuteNonQuery();

     //OleDbCommand com = new OleDbCommand("SELECT * FROM DPMaster", con);
     //OleDbDataReader dr = com.ExecuteReader();

     //while (dr.Read())
     //{
     //    MessageBox.Show(dr[2].ToString());
     //}

     MessageBox.Show(a.ToString());
 }
 catch
 {
     MessageBox.Show("cannot");
 }

如果我执行了注释块,则应用程序可以正常工作。但是插入块没有。

知道了,为什么我无法插入、更新或删除数据库记录?

【问题讨论】:

  • 您应该查看异常的内容,而不是捕获异常。它应该让您知道出了什么问题。
  • 你说的不起作用是什么意思?
  • Do catch(Exception ex) 并显示 ex.Message,或查看 ex 详细信息
  • 你不应该使用访问,你的应用程序会变慢并且数据完整性不稳定,如果你使用MS-SQL你将不得不迁移整个数据库。如果您需要可嵌入的数据库,请使用 FireBird Embedded。它还有一个额外的好处,即您可以在必要时将可嵌入的 db 文件插入到完整的 firebird 服务器中,并且它是跨平台的。
  • @Quandary:@Abilash 没有使用 Access——他使用的是 Jet,它恰好安装在从 Win2000 开始的所有 Windows 副本上。这是使用它的一大优势,它无需安装即可用于您的应用程序。它也是非常适合大量应用程序的数据库引擎。添加对 SQL Server 或 Firebird 的依赖会带来安装/配置/管理问题,而对于任何特定的应用程序,它可能不会带来任何有用的好处。

标签: c# sql ms-access ado.net oledb


【解决方案1】:

我自己遇到的问题是:

您已将 mdb 文件添加到您的解决方案中,并且每次运行该程序时,它都会被复制到调试文件夹中。

因此您可以从中进行选择,但删除行不会影响您在解决方案中拥有的原始文件。

检查一下。

【讨论】:

  • +1 - 因为它是一个数据库,所以我永远不会考虑将它添加到我的解决方案中,所以永远不会想出这是一个可能的问题。
  • 正如你所说,我已经从项目中删除了数据库并从其他位置使用。现在它工作正常。记录被插入到数据库中。非常感谢简..
【解决方案2】:

首先,永远不要扼杀你的异常。最好让你的异常冒泡,这样你就可以获得关于什么不正常工作的重要信息。最好写:

con.Open();
OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con);

int a = com.ExecuteNonQuery();

try {
    con.Open();
    OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con);

    int a=com.ExecuteNonQuery();

} catch {
    MessageBox.Show("cannot");
}

其次,尽可能使用using 块,因为这些块将处理不再需要的对象。所以你的代码应该是这样的:

using (OleDbConnection con = new OleDbConnection(conStr))
    using (OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con) {

        con.Open();

        int a = com.ExecuteNonQuery();

        MessageBox.Show(a.ToString());
    }

使用此代码,您将更有可能在异常冒泡时知道出了什么问题,此外,一旦您退出 using 块的范围,使用的资源将被释放为您的对象将被丢弃。

【讨论】:

  • 我粘贴的代码工作正常,没有任何错误!!但是记录没有插入数据库!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多