平时偶尔因为工作需要得自己写一些小工具去操作数据库,因为只是需要实现一些小的功能,也不涉及多类型的数据库,也许就是一次性的使用。所以此时那些大而全的数据库操作框架,也就不再那么适合我了。而本篇博文主要是记录自己在工作中主要使用的几种方式进行,归纳与汇总。

一、目的。

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:   }

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

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:   }

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

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:  }

三、使用总结。
       本篇博文主要介绍了在开发中经常使用的几种数据库连接方式,并且在使用过程中,个人感觉ODBC和Ole DB基本上没有多大的区别,Ole DB相对而言支持的内容更加广泛一些而已。反过来的意思也就是说,ODBC相比Ole DB更加专业。同理对于厂商提供的程序集来说,也是一样的。本着不重复造轮子的原则,推荐优先选择厂商提供的程序集。不过对于一些数据库如果要使用厂家提供的便利需要安装一下额外的产品。

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, "Courier New", courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); width: 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

如何把数据放到C#的心里之 DB2实例的更多相关文章

  1. java发送post请求 ,请求数据放到body里

    java利用httpclient发送post请求 ,请求数据放到body里. /** * post请求 ,请求数据放到body里 * * @author lifq * * 2017年3月15日 下午3 ...

  2. Redis为什么要把所有数据放到内存中?

    Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘.所以Redis具有快速和数据持久化的特性. 如果不将数据放到内存中,磁盘的I/O速度会严重影响redis的性能.在内 ...

  3. 根据从redis缓存的数据查询出来,在从数据库中取出所有的数据,俩个数据进行比较,去掉重复,剩下库中新插入的数据,取出新数据,然后把redis中的缓存数据清空把从数据库中查出来的所有数据放到redis缓存中

    参考代码: public String getNewCenter(HttpServletRequest request,HttpServletResponse resonse){ JSONObject ...

  4. 大数据应用日志采集之Scribe演示实例完全解析

    大数据应用日志采集之Scribe演示实例完全解析 引子: Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它能够从各种日志源上收集日志,存储到一个中央存储系 ...

  5. 查询执行成本高(查询访问表数据行数多)而导致实例 CPU 使用率高是 MySQL 非常常见的问题

    MySQL CPU 使用率高的原因和解决方法_产品性能_常见问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/51587.html ...

  6. 将一个数据库中表的数据导入另一个数据库(DB2)

    将一个数据库中的数据导入另一个数据库(DB2) 我这里举得例子是使用的DB2数据库,其他数据库思路也是这样啦! 1.从db2 数据库中将表中的数据导入本地的excel中 export to d:\my ...

  7. Struts 中 ActionContext ctx.put()把数据放到ValueStack里之数据传输背后机制:ValueStack(值栈)

    1.     数据传输背后机制:ValueStack(值栈) 在这一切的背后,是因为有了ValueStack(值栈)! ValueStack基础:OGNL要了解ValueStack,必须先理解OGNL ...

  8. freemarker迭代list、map等常规操作,将数据放到模板中

    转自:https://blog.csdn.net/wickedvalley/article/details/65937189 一.controller开始准备模型.数据1.po类 package co ...

  9. python 将表格多个列数据放到同一个单元格中

      表格模板: 目的将卡片1到卡片5的所有数据组合起来到一个单元格中如下入F列中(工作中为了避免手动复制粘贴),其余不变,因为数据太多 自己一个一个复制工作效率太低,所以写这个脚本是为了方便自己有需要 ...

随机推荐

  1. 使用zxing生成彩色或带图片的二维码

    <!-- https://mvnrepository.com/artifact/com.google.zxing/core --> <dependency> <group ...

  2. 31.FTP简介

    1.FTP 是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20.21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接受客户端发出的相关FTP 命令与参 ...

  3. 6.DHCP配置故障转移(Windows2012)

    准备: 子网对应核心交换机网关配置多个中继 interface Vlan64 ip address 10.10.64.1 255.255.248.0 ip helper-address 10.10.1 ...

  4. C++ 标准模板库(STL):vector

    目录 1. vector 1.1 vector的定义 1.2 vector容器内元素的访问 1.3 vector 常用函数实例解析 1.4 vector的常见用途 1. vector 变长数组,长度根 ...

  5. WinformGDI+入门级实例——扫雷游戏(附源码)

    写在前面: 本文将作为一个入门级的.结合源码的文章,旨在为刚刚接触GDI+编程或对相关知识感兴趣的读者做一个入门讲解.游戏尚且未完善,但基本功能都有,完整源码在文章结尾的附件中. 整体思路: 扫雷的游 ...

  6. “科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛 G 血压游戏

    [血压游戏] (https://ac.nowcoder.com/acm/contest/5278/G) 神奇的tag数组...,巧妙弥补了高度损失. 方法一:dsu on tree 类似长链剖分,不过 ...

  7. 2019 Multi-University Training Contest 4.Divide the Stones(贪心)

    题意:给你n和k (k|n) 有n个数 第i个数权值为i 要你求权值相同且分成k组 且每组的个数为n/k 思路:恶心构造题,首先对于总权值不能分为k份的 显然不能分成 然后 我们把n/k 分奇偶 我们 ...

  8. 【洛谷 p3372】模板-线段树 1(数据结构--线段树)

    题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数加上x:2.求出某区间每一个数的和. 解法:如题,模版题.需要加上 lazy 标记,也就是我的 upd.lazy 标记的思路就是对一个结 ...

  9. hdu3938 Portal

    Problem Description ZLGG found a magic theory that the bigger banana the bigger banana peel .This im ...

  10. 国产网络损伤仪SandStorm -- 主界面简介

    国产网络损伤仪SandStorm可以模拟出带宽限制.时延.时延抖动.丢包.乱序.重复报文.误码.拥塞等网络状况,在实验室条件下准确可靠地测试出网络应用在真实网络环境中的性能,以帮助应用程序在上线部署前 ...