C# 如何使用.NET中的OleDb命名空间连接到Access数据库?
我想为我的Windows窗体应用程序使用Access数据库。用C写的 我已经使用OleDb名称空间进行连接,并且我能够使用OleDbConnection和ExecuteReader对象从源中选择记录。 但是,我还不能插入、更新或删除记录 我的代码如下:C# 如何使用.NET中的OleDb命名空间连接到Access数据库?,c#,sql,ms-access,ado.net,oledb,C#,Sql,Ms Access,Ado.net,Oledb,我想为我的Windows窗体应用程序使用Access数据库。用C写的 我已经使用OleDb名称空间进行连接,并且我能够使用OleDbConnection和ExecuteReader对象从源中选择记录。 但是,我还不能插入、更新或删除记录 我的代码如下: OleDbConnection con = new OleDbConnection(strCon); try { string con="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
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");
}
如果执行注释块,则应用程序工作正常。但是插入块没有
知道这一点,为什么我无法插入、更新或删除数据库记录?我自己遇到的问题如下: 您已将mdb文件添加到解决方案中,每次运行程序时,它都会复制到调试文件夹中 因此,您可以从中进行选择,但删除行不会影响解决方案中的原始文件
检查一下。我自己遇到的问题如下: 您已将mdb文件添加到解决方案中,每次运行程序时,它都会复制到调试文件夹中 因此,您可以从中进行选择,但删除行不会影响解决方案中的原始文件
检查它。首先,不要扼杀你的异常。最好让您的异常冒泡起来,这样您就可以获得有关哪些异常工作不正常的重要信息。最好写下:
con.Open();
OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con);
int a = com.ExecuteNonQuery();
第二,尽量使用块,因为这些块将处理不再需要的对象。因此,您的代码应该如下所示:
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());
}
使用此代码,您将更有可能在异常冒泡时了解出了什么问题,此外,一旦退出使用块的范围,所使用的资源将随着对象的处置而释放。首先,不要扼杀您的异常。最好让您的异常冒泡起来,这样您就可以获得有关哪些异常工作不正常的重要信息。最好写下:
con.Open();
OleDbCommand com = new OleDbCommand("INSERT INTO DPMaster(DPID,DPName,ClientID,ClientName) VALUES('53','we','41','aw')", con);
int a = com.ExecuteNonQuery();
第二,尽量使用块,因为这些块将处理不再需要的对象。因此,您的代码应该如下所示:
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());
}
有了这段代码,当异常冒泡时,您将更有可能知道出了什么问题,而且,一旦您退出使用块的范围,所使用的资源将随着对象的处置而释放。您应该看到异常的含义,而不是捕捉异常。它应该能告诉您出了什么问题。什么是不工作?执行catchException ex和show ex.Message,或查看ex Details如果不使用access,您的应用程序将变得缓慢,数据完整性不稳定,如果使用MS-SQL,您将不得不迁移整个数据库。如果需要嵌入式数据库,请使用FireBird embedded。它还有一个额外的好处,即一旦有必要,您可以将可嵌入的db文件插入完整的firebird服务器,并且它是跨平台的。@困惑:@Abilash没有使用Access-他使用的是Jet,它恰好安装在Win2000上的所有Windows副本上。这是使用它的一个巨大优势,它可以用于您的应用程序而无需安装。它也是一个非常适合于所有应用程序的数据库引擎。添加对SQL Server或Firebird的依赖会带来安装/配置/管理问题,而对于任何特定的应用程序,它可能不会带来任何有用的好处。与其捕获异常,不如查看异常说明。它应该能告诉您出了什么问题。什么是不工作?执行catchException ex和show ex.Message,或查看ex Details如果不使用access,您的应用程序将变得缓慢,数据完整性不稳定,如果使用MS-SQL,您将不得不迁移整个数据库。如果需要嵌入式数据库,请使用FireBird embedded。它还有一个额外的好处,即一旦有必要,您可以将可嵌入的db文件插入完整的firebird服务器,并且它是跨平台的。@困惑:@Abilash没有使用Access-他使用的是Jet,它恰好安装在Win2000上的所有Windows副本上。这是使用它的一个巨大优势,它可以用于您的应用程序而无需安装。它也是一个非常适合于所有应用程序的数据库引擎。添加对SQL Server或Firebird的依赖性会带来安装/配置/管理问题,而对于任何特定的应用程序,它可能不会带来任何有用的好处。+1-由于它是一个数据库,我从未想过要将其添加到我的解决方案中,所以我永远不会把这当作一个可能的问题。正如你说的,我已经从项目中删除了数据库,并从其他位置使用。现在它工作正常了。这些记录被插入到数据库中。非常感谢Jane..+1-因为它是一个数据库,我从来没有想过要将它添加到我的解决方案中,所以从来没有
r会认为这是一个可能的问题。正如你所说,我已经从项目中删除了数据库,并从其他位置使用。现在工作正常。这些记录被插入到数据库中。非常感谢Jane.我粘贴的代码运行良好,没有任何错误!!但是记录没有插入到数据库中!!我粘贴的代码工作正常,没有任何错误!!但是记录没有插入到数据库中!!