zoukankan      html  css  js  c++  java
  • C#中操作数据库的相关知识

    使用SqlDataReader对象的rdr的read方法可以从查询结果中逐行读取数据记录。SqlDataReader能够完成的DataSet也能完成,并且灵活性更高。在执行一些尖端的操作的时候,SqlDataReader效率比较高。SqlDataReader每次在内存中始终只有一行。这样提高了应用程序的性能并减少了系统开销。

     
    DataSet用来存放从数据库中提取的数据,他的功能实现还要DataAdapter对象做支撑,他是DataSet对象和数据库自检的桥梁,主要是数据库中检索数据并填充DataSet对象或者用户对DataSet对象作出的更改写入数据库。
    DataAdapter对象通过Fill方法把数据填充到DataSet方法中。
     
    C#语言提供了丰富的数据库操作类库,极大地方便了对数据库的操作。在C#中,常用的有三种 访问数据库的模式分别为:SqlClient模式、OleDb模式和Odbc模式。其中SqlClient模式是微软老大哥专门为其产品Sql Server数据库而设计的,所以如果欲使用Sql Server数据库开发应用程序的话,建议使用这种模式,其性能和效率是比其他模式的要高。OleDb模式和Odbc模式可以运用在任何支持该模式的数据 库产品中,如Access数据库、DB2、Sybase和Sql Server 数据库等。下面简单介绍C#操作数据库的大致过程:

    1、引入相关的命名空间

    在C#中要操作数据库,一般情况需要引入两个命名空间,在三种连接模式中都要引入下面的命名空间:

    System.Data;

    而另外一个命名空间,使用不同的连接模式而不同,如果使用SqlClient模式的话,则需要引入如下命名空间:

    System.Data.SqlClient;

    如果使用OleDb模式的话,需要使用下面的命名空间:

    System.Data.OleDb;

    如果使用Odbc模式的话,需要使用下面的命名空间:

    System.Data.Odbc;

    2、定义连接字符串,并建立连接对象

    在C#中,如果想连接数据库的话,需要使用Connection连接对象。同样,不同的连接模式下,所使用的连接对象也不同:

    (1)如果使用SqlClient模式的话,其基本连接字符串和连接对象如下:

    连接字符串:string connString = "server=.;database=testDB;uid=sa;pwd=;";

    其中,server是指数据库所在的机器(服务器),如果使用当前机器(本地机器)的话,可 以使用“.”、“(local)”、“127.0.0.1”或本地机器的名字。如果使用其它机器上的数据库的话,可以使用那台机器的机器名字(确保域和工 作组的正确)或IP地址。database指的数据库的名字。uid和pwd分别代表连接数据库的用户名和密码。

    定义连接字符串后,就可以建立SqlClient模式下的连接对象了,在SqlClient模式下,应使用SqlConnection。

    SqlConnection sConn = new SqlConnection(connString);

    (2)如果使用OleDb模式的话,其基本连接字符串和连接对象如下:

    连接字符串:string connString = "Provider=SQLOLEDB.1;DataSource=(local);uid=sa;pwd=;Initial Catalog=testDB";

    其中,Provider给出数据提供程序;DataSource给出数据库所在的服务器名或 IP地址(具体同SqlClient模式下的server关键字);uid和pwd分别指用户名和密码;Initial Catalog给出的是所连接的数据库的名字。如果使用Access数据库的话,其连接字符串的形式应该如下:

    string connString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source = F:\student.mdb";

    定义好连接字符串后,就可以定义连接对象了,在该模式下,应使用OleDbConnection。

    OleDbConnection odConn = new OleDbConnection(connString);

    (3)如果使用Odbc模式的话,其基本连接字符串和连接对象如下:

    连接字符串:string connString = "Driver={Sql Server};Server=.;Database = testDB;uid=sa;pwd=;";

    如果使用Access数据库,其连接字符串如下:

    string connString = "{Microsoft Access Driver(*.mdb)};Dbq = "F:\student.mdb";";

    定义好连接字符串后,使用OdbcConnection建立连接对象:

    OdbcConnection oConn = new OdbcConnection(connString);

    3、打开数据库连接

    打开数据库使用Open方法,但在试图打开数据连接时会发生错误,因此常采用如下的异常控制方法(这里假设打开SqlClient模式下连接,实际上只不过连接对象的名字不同而已):

    try
    {
    sConn.Open();
    }
    catch(Exception ex)
    {
    MessageBox.Show("发生错误:"+ex.Message);
    //Console.WriteLine("发生错误:"+ex.Message); //在控制台下使用这种方式
    }

    4、Command命令对象的应用

    Command用于向数据库传输的命令的对象,其构造函数常用两个参数,一个参数是所使用的 命令文本(CommandText),另一个为所使用的连接对象Connection。根据不同的数据库连接模式,其形式也不同,SqlCommand对 应着SqlClient模式;OleDbCommand对应着OleDb模式,OdbcCommand对应着Odbc模式。

    假设我们想使用SqlClient模式查询Sql Server中testDB数据库中student表中的xh(学号)、xm(姓名)和xb(性别)三列的值,则可以建立如下的命令对象(sConn参见建立的连接sConn:

    SqlCommand sCmd = new SqlCommand("SELECT xh,xm,xb FROM student",sConn);

    亦可使用如下的形式:

    SqlCommand sCmd = new SqlCommand();
    sCmd.CommandText = "SELECT xh,xm,xb FROM student";
    sCmd.Connection = sConn;

    命令对象常用的有三个方法:ExecuteReader(), ExecuteNonQuery()和ExecuteScalar()。ExecuteReader方法用于返回查询结果的全部数据。 ExecuteNonQuery方法用于返回所影响的行数,一般用于Insert、Update和Delete操作。ExecuteScalar方法返回 结果中的第一行第一列的值。

    5、数据读取器DataReader

    DataReader用于从返回来的数据区中读取数据。其根据使用的数据连接模式不同也有不同的形式:SqlDataReader对应着SqlClient模式,OleDbDataReader对应着OleDb模式,OdbcDataReader对应着Odbc模式。

    数据读取器应与命令对象配合使用,下面接着4中的例子来写:

    SqlDataReader sdr = null;
    sdr = sCmd.ExecuteReader(); //执行命令对象,并用sdr指向结果集的第一条记录。
    while(sdr.Read()) //每读取一条记录后,指向其下一条记录
    {
    Console.WriteLine("学号:{0},姓名:{1},性别:{2}",sdr["xh"],sdr["xm"],sdr["xb"]); //或使用下面的格式
    // Console.WriteLine("学号:{0},姓名:{1},性别:{2}",sdr[0],sdr[1],sdr[2]);
    }
    sdr.Close(); //关闭读取器

    6、数据集DataSet和数据适配器DataAdapter

    一般数据集和数据适配器是密不可分的,下面先介绍数据适配器。

    数据适配器可以容纳一组数据命令和一个数据库连接对象,这与Command对象不同, Command只有一个数据命令和一个数据库连接。数据适配器根据不同的连接模式也有不同的形式:SqlDataAdapter、 OleDbDataAdapter和OdbcDataAdapter。下面给出SqlClient模式下数据适配器的定义方式:

    SqlDataAdapter sda = new SqlDataAdapter("SELECT xh,xm,xb FROM student",sConn);

    第一个参数是用到的SQL语句,第二个参数是数据连接。也可以使用一个命令对象传递上面的信息。即:

    SqlDataAdapter sda = new SqlDataAdapter(sCmd);

    下面再介绍一下DataSet,DataSet是在内存中缓存的数据集,包括数据本身,还包括定义在数据上的约束和关系等信息。数据集中可以包含0个这样的数据对象。不管使用什么样的数据库连接模式,其只有唯一的形式。其定义方法如下:

    DataSet ds = new DataSet();

    定义完数据集后,就可以调用数据适配器的Fill方法来填充数据集:

    sda.Fill(ds);

    也可以在填充的同时,指定表名:

    sda.Fill(ds,"Student");

    可以使用下面的方法读取数据集中的数据信息:

    int rowNum = ds.Tables["Student"].Rows.Count; //获得数据集表student表中的行数

    int columnNum = ds.Tables["Student"].Columns.Count; //获得数据集表student中的列数

    for(int i = 0; i < rowNum; i ++)
    {
    for(int j = 0; j < columnNum; j ++)
    {
    Console.Write(ds.Tables["student"].Columns[j].ColumnName+":"+ds.Tables["student"].Rows[i][j].ToString();
    }
    Console.WriteLine();

    }

    下面给出一个数据库操作的例子。假设在Sql Server中有一个数据库test,其存放着一个数据表名为student,其结构为student(xh,xm,xb,mz),下面使用SqlClient模式连接数据库:

    /**************************************

    *

    * 本程序演示数据库的操作

    * 使用Sql Server2000数据库操作

    *

    * ************************************/

    using System;

    //引入命名空间

     

    using System.Data;

    using System.Data.SqlClient;

     

    class DbOper

    {

    static void Main()

    {

    //定义连接字符串

    string connString;

    connString="server=.;uid=sa;pwd=;database=test;";

    //定义连接对象sConn

    SqlConnection sConn = new SqlConnection(connString);

    try

    {

    //打开连接

    sConn.Open();

    }

    catch(Exception ex)

    {

    //给出错误信息

    Console.WriteLine("连接错误:"+ex.Message);

    }

    //定义SQL查询语句

    string sql;

    sql = "select * from student";

    //定义命令对象sCmd

    SqlCommand sCmd = new SqlCommand(sql,sConn);

     

    //定义数据读取器sdr

    SqlDataReader sdr=null;

     

    //执行命令对象sCmd并赋值给sdr

    sdr = sCmd.ExecuteReader();

     

    //循环输出sdr中的内容

    Console.WriteLine(" 学 号 姓名 性别民族");

    while(sdr.Read())

    {

    Console.WriteLine(sdr[0]+" "+sdr["xm"]+sdr["xb"]+" "+sdr["mz"]);

    }

    //关闭数据读取器

    sdr.Close();

     

    //关闭数据库连接

    sConn.Close();

    }

    }

    例二:

  • 相关阅读:
    《JAVA设计模式》之模板模式(Template)
    《JAVA设计模式》之策略模式(Strategy)
    《JAVA设计模式》之享元模式(Flyweight)
    《JAVA设计模式》之桥接模式(Bridge)
    《JAVA设计模式》之组合模式(Composite)
    《JAVA设计模式》之外观模式(Facade)
    《JAVA设计模式》之代理模式(Proxy)
    《JAVA设计模式》之装饰模式(Decorator)
    《JAVA设计模式》之适配器模式(Adapter)
    《JAVA设计模式》之原型模式(Prototype)
  • 原文地址:https://www.cnblogs.com/MJ1221/p/3152416.html
Copyright © 2011-2022 走看看