一个有用的数据库库






2.75/5 (4投票s)
2006年12月6日
5分钟阅读

54796

704
本文介绍了一个有用的数据库库。
引言
所有程序员都会问自己一个问题,“连接字符串格式是什么?” 我自己仍然会问的一个问题是,“是 OLE、ODBC 还是 SQL?” 嗯,我知道有很多不同的方法可以与数据库交互和连接。我将向您展示一种我喜欢的编写数据库编程代码的方式。请原谅我可能存在的任何错误;这是我的第一篇文章,我不是一个出色的技术作家。
我们如何处理数据库
首先,让我们问自己几个问题
- 我的程序需要连接到数据库吗?
- 会是什么类型的数据库,例如,MS SQL、MS Access、MySQL?
- 我将对数据库执行什么操作,例如,SELECT、INSERT、CREATE?
在此示例中,我们假设
- 是的,我们需要一个数据库,
- 数据库将是 MS Access,并且
- 我们需要从数据库返回(
SELECT
)记录。
现在我们知道了要做什么,让我们来谈谈基础知识。要以编程方式在数据库上运行 SQL 语句,至少我们需要几样东西。
- 一个 Connection 类
- 一个 Command 类
对于 Access 数据库,它将是这样的
OleDBConnection _OleConn = new OleDbConnection(ConnectionString);
OleDbCommand _OleCmd = new OleCommand(SQLstring, _OleConn;
但是我们仍然需要将 SQL 语句运行到数据库,所以
_OleConn.Open();
//or
_OleCmd.Connection.Open();
OleCmd.ExecuteNonQuery();
_OleConn.Close();
//or
_OleCmd.Connection.Open();
很简单,至少在做过几次之后。我知道刚开始时,这些东西会让人感到困惑。但是有了 CodeProject 和 Google 这样的地方,您几乎可以解决遇到的任何问题。现在,让我们深入研究一下。
我不喜欢绕弯子
年轻程序员可能面临的最大问题之一是面向对象编程 (OOP)。我的意思是,我们可能会忍不住将过多的代码放入一个方法(或函数)中,原因可能是想在一个地方看到所有代码,或者仅仅是不知道更好的方法。将代码分解成逻辑部分非常有帮助。以数据库调用为例。如果您知道将从多个方法中反复调用数据库,请不要将代码放在每个方法中。创建一个包含数据库代码的方法,并每次都调用它。我知道我在这里谈论的是基础知识,但请坚持下去。所以,这是我的做法:我有一个“DB
”类,它有一个静态方法“RunSqlCommand
”,它接受一个参数“MySqlData
”,这是一个不同的类,用于存储连接字符串、提供程序(我稍后会解释)以及要运行的 SQL 命令等值。
public static class MyDatabase
{
public static void RunSqlCommands(MySqlData _MySQLData)
{
if (_MySQLData.MyDatabaseProvider == DatabaseProvider.MicrosoftJet)
{
OleDbConnection MyOleConn =
new OleDbConnection(_MySQLData.MyConnectionString);
OleDbCommand MyOleComm =
new OleDbCommand(_MySQLData.MySQLString, MyOleConn);
MyOleComm.Connection.Open();
MyOleComm.ExecuteNonQuery();
MyOleComm.Connection.Close();
}
else
{
SqlConnection MySqlConn =
new SqlConnection(_MySQLData.MyConnectionString);
SqlCommand MySqlComm =
new SqlCommand(_MySQLData.MySQLString, MySqlConn);
MySqlComm.Connection.Open();
MySqlComm.ExecuteNonQuery();
MySqlComm.Connection.Close();
}
}
}
您不需要将该类设置为静态,但这很有帮助。这样,您只需调用 MyDatabase.RunSqlCommands(_MySQLData);
。这样事情会更简单。
连接字符串
获取数据库的连接字符串(通过 Google 搜索)很容易,只要格式正确。您可以在程序中以多种不同的方式存储它。我强调的一点是,**切勿将其硬编码到您的程序中**,除非您知道数据库永远不会移动或更改名称,或者您的程序将永远无法与不同的数据库配合使用。即使那样,我也不建议硬编码。好的,假设我们的程序将创建表并在这些表中进行操作。如果设计得当,您的程序可以与 SQL Server、Access、MySQL 和 Oracle 协同工作。因此,您将需要一种方法为其中每一个生成连接字符串。好吧,我认为我有一个很好的方法来做到这一点。
数据链接属性对话框
您可以轻松地将此功能集成到您的程序中,并且它非常有用。方法如下。添加对以下库的引用:
- Microsoft ActiveX Data Objects 2.8 Library
- Microsoft OLE DB Service Component 1.0 Type Library
然后添加以下 using
语句
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Text;
using MSDASC; // add this
using ADODB; // add this
实现它的代码
public static void GenerateConnectionString(ref MySqlData _MySqlData)
{
DataLinksClass MyDataLink = new DataLinksClass();
Connection MyADOConn = (Connection)MyDataLink.PromptNew();
if (MyADOConn.Provider == "Microsoft.Jet.OLEDB.4.0")
{
_MySqlData.MyDatabaseProvider = DatabaseProvider.MicrosoftJet;
_MySqlData.MyConnectionString = MyADOConn.ConnectionString;
}
else
{
_MySqlData.MyDatabaseProvider = DatabaseProvider.MicrosoftSQL;
_MySqlData.MyConnectionString = MyADOConn.ConnectionString;
_MySqlData.MyConnectionString = _MySqlData.MyConnectionString.Substring(
(_MySqlData.MyConnectionString.IndexOf(";") + 1),
(_MySqlData.MyConnectionString.Length - (
(_MySqlData.MyConnectionString.IndexOf(";") + 1))));
}
}
再次,我使用静态方法是因为我不需要在每个地方都实现它。另外,我将 _MySqlData
的“ref
”传递给它,该方法负责为许多连接字符串和提供程序分配值。
警告
我发现在多线程程序中使用这些方法时,当一个线程尝试执行某个方法而另一个线程正在执行同一个方法时,我会遇到错误。我尝试过 `Monitor.Lock` 和 `Lock`。但我发现最好的方法是将方法改为非静态,并创建一个类的实例。现在,我确信有人可能会骂我愚蠢,但我也知道有人会感谢我向他们展示这一点。
MyDatabaseLibrary
我有一个叫做 MyDatabaseLibrary 的东西。它是一个 DLL 文件,其中包含很多数据库代码。这个库非常简单(简单=好),您可以在这里看到它。
有了这个库,我就可以使用
MyDatabse
类- 使用“
RunSqlCommands
”在数据库上运行 SQL,例如INSERT
、CREATE
- 使用“
GetDataBaseSchema
”获取数据库的表 - 使用“
GetDataTable
”返回一条记录、多条记录或整个表 - 使用“
GenerateConnectionString
”生成连接字符串
- 使用“
MySqlData
类存储- 连接字符串
- 数据库提供程序
- 要执行的 SQL 命令
DatabaseProvider
枚举存储了库使用的数据库提供程序列表。
使用 MyDatabaseLibrary
这是精彩的部分。要使用此库,您需要遵循以下步骤
- 创建一个
MySqlData
的新实例,例如,_msd
- 调用
GenerateConnectionString(ref _msd)
- 添加 SQL 命令
_msd.MySQLString = “SELECT * FROM <table>”;
- 调用
GetDataTable(_msd)
当然,您必须添加对该库的引用并添加您的“using
”语句。另外,请确保您拥有该库使用的两个文件:Interop.Adodb.dll 和 Interop.Msdasc.dll。
结论
我构建了一个非常简单的程序来使用这个库,以便您可以看到如何自己使用它。您可以随意使用它。但请给我一些反馈。让我知道您的想法。祝您一切顺利!