平时偶尔因为工作需要得自己写一些小工具去操作数据库,因为只是需要实现一些小的功能,也不涉及多类型的数据库,也许就是一次性的使用。所以此时那些大而全的数据库操作框架,也就不再那么适合我了。而本篇博文主要是记录自己在工作中主要使用的几种方式进行,归纳与汇总。
一、目的。
1、了解数据库操作的基本步骤。
2、了解使用ODBC的方式进行数据库的基本操作。
3、了解使用OleDb的方式进行数据库的基本操作。
4、了解使用数据库厂商提供的数据库操作类库的方式进行数据库操作。
二、基本原理与过程。
1、一般我们操作数据库主要设计的几个步骤基本上是固定的。
1、新建数据库连接
2、创建数据库命令并且设置相关参数
3、执行数据库命令获取返回结果
4、关闭数据库连接
2、预备内容(因为涉及的文后使用的ODBC的方式使用的DSN,需要配置预先配置下ODBC)
要想使用DB2数据库的ODBC必须得自己安装对应的驱动程序。微软只为自己的数据库和Oracle的数据库提供了默认就安装的驱动程序。具体的驱动下载和安装可以自己百度得之。
给数据源填写上有意义的命名之后,如果在下拉框中没有你的数据库的话,直接点击添加即可。
DB2的默认端口号50000,如果你不清楚自己是否修改过默认的端口号的话,你可以通过在db2的实例中输入db2 get dbm cfg 命令,找到你自己对于的端口信息即可。
3、使用ODBC的方式进行数据库的基本操作。
C#中的System.Data.Odbc命名空间提供了很多集成好了的数据库操作类。
第一步、使用OdbcConnection 创建与数据库的连接。
通过使用指定的连接字符串,创建对应的数据库连接即可。
"Driver={SQL Server};Server=(local);Trusted_Connection=Yes;Database=AdventureWorks;"
"Driver={Microsoft ODBC for Oracle};Server=ORACLE8i7;Persist Security Info=False;Trusted_Connection=Yes"
"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\bin\Northwind.mdb"
"Driver={Microsoft Excel Driver (*.xls)};DBQ=c:\bin\book1.xls"
"Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=c:\bin"
"DSN=dsnname"
上面的几个样式是微软的MSDN上给出的相应的配置方法。最简单的方式就是使用最后面的一种。因为我在使用时,都会建立好相应的DSN。
第二步、创建数据库命令并且设置相关的参数。
最普通的方法是使用时创建 OdbcCommand类的实例,这个类可以执行SQL语句或存储过程。通过使用两个参数实例化这个类的方法。
OdbcCommand(String, OdbcConnection) 第一个参数确定了需要执行的SQL或存储过程。第二个参数确定了在那个数据库连接上执行。
第三步、执行数据库命令获取返回结果集,并且对结果机进行处理。
OdbcCommand实例提供三个基本的数据库操作方法。
ExecuteReader():执行对查询返回的结果集。
ExecuteNonQuery():执行数据 更新语句。(Insert,Delete,Update,Set)
ExecuteScalar():从数据库中返回查询结果集的第一行的第一列。
使用OdbcDataAdapter 类搭配OdbcCommandBuilder可以用来填充 DataSet。
代码实例:
1: private bool Connection2DB2WithODBC()
2: {
3: try
4: {
5: OdbcConnection odbcConnection = new OdbcConnection("DSN=localdbInst"); //创建连接
6: string commandText = "INSERT INTO DB2INST1.TEST (ID, NAME, AGE) VALUES (3, 'candy', 30)";
7: string commandText2 = " Select count(*) from test";
8: string commandText3 = "Select * from test";
9: OdbcCommand command = new OdbcCommand(commandText3); //创建命令
10: command.Connection = odbcConnection;
11:
12: odbcConnection.Open(); //打开数据库连接
13:
14: // command.ExecuteNonQuery();
15: // int count = (int)command.ExecuteScalar();
16: // MessageBox.Show("The Count of table is:" + count);
17: OdbcDataReader reader = command.ExecuteReader(); //执行数据库命令
18: string content = "";
19: while (reader.Read())
20: {
21: string id = (string)reader[0];
22: string name = (string)reader[1];
23: int age = (int)reader[2];
24: content += "Id:" + id + " name:" + name + " age:" + age + Environment.NewLine;
25: }
26: MessageBox.Show(content);
27: odbcConnection.Close();
28: }
29: catch (OdbcException exception)
30: {
31: MessageBox.Show(exception.Message + exception.ErrorCode + exception.Data);
32: return false;
33: }
34: return true;
35: }
4、通过OleDB的连接方式进行数据库操作。
百度百科定义OleDB:OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化问题语言(SQL)能力,还具有面向其他非SQL数据类型的通路。
说明Ole DB相对于ODBC来说支持的范围更加广泛一点。
创建连接的方式 MSDN 上有具体的规范。
"Provider=MSDAORA; Data Source=ORACLE8i7;Persist Security Info=False;Integrated Security=Yes"
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\bin\LocalAccess40.mdb"
"Provider=SQLOLEDB;Data Source=(local);Integrated Security=SSPI"
"Provider=IBMDADB2;" + "Data Source=databaseName;UID=username;PWD=password;"
其余的步骤和ODBC是一样的只不过实例化的类不同了而已。
连接代码实例。
1: private bool Connection2DB2WithOleDb()
2: {
3: try
4: {
5: OleDbConnection con = new OleDbConnection("Provider=IBMDADB2;" + "Data Source=sample;UID=db2inst1;PWD=kivision@123;");
6: con.Open();
7: }
8: catch (Exception)
9: {
10: return false;
11: }
12: return true;
13: }
5、使用IBM 提供的程序集。安装完客户端之后在安装的目录下的BIN目录下有个netf11的目录,这个目录中提供的程序集,可以很方便的操作DB2数据库。功能也相对较齐全点。针对性也比较强。
使用IBM提供的这个程序集,不仅有通过使用ODBC具有的方法之外,还可以返回为XmlReader形式的结果集。数据的通用性也大大的提升了。同样为DB2编程中经常使用的参数赋值提供了很多方便的方法。
连接代码实例:
1: private bool Connection2DB2()
2: {
3: DB2Connection cn = new DB2Connection("Database=SAMPLE;UserID=db2inst1;Password=kivision@123;Server=192.168.1.102");
4: DB2Command myCommand = new DB2Command("INSERT INTO DB2INST1.TEST (ID, NAME, AGE) VALUES (2, 'kasson', 25)");
5: myCommand.Connection = cn;
6: try
7: {
8: cn.Open();
9: myCommand.ExecuteNonQuery();
10: cn.Close();
11: }
12: catch (Exception )
13: {
14: return false;
15: }
16: return true;
17: }