zoukankan      html  css  js  c++  java
  • C#ADO.NET技术总结

    【ADO.NET的主要组件-。.NET framework数据提供程序和DataSet(数据集)】

    一.DataSet数据集负责对数据库执行命令。

    二.NET framework数据提供程序的四个核心对象

    注意!在Sql Server数据库中实际应用的时候对象前边要加sql,不同数据库的前缀不同。

    1.Connection对象:连接数据库

    常用属性:ConnectionString (设置/获取应用程序连接数据库的连接字符串)

    常用方法:void open()[使用ConnectionString属性所指定的设置打开数据库连接]
    void Close()[关闭与数据库的连接]

    <建立应用程序与数据库连接需要以下三个步骤>
    ①.定义连接字符串

    sql Sever 数据库的连接字符串格式一般如下:
    String connString = "Data Source=.; Initial Catalog = pubs;uid = sa;pwd = 密码"

    ②.创建Connection对象

    SqlConnection connection = new SqlConnection(conString);

    ③.打开与数据库的连接

    connection.Open();

    关闭与数据库的连接

    connection.Close();

    经验:打开数据库连接,执行命令后,要确保关闭数据库连接,否则下次执行后报Exception,还需要先关闭在启动。

    《异常处理》:数据库操作过程可能出现异常,使用try-catch-finally语句处理异常.

    处理操作异常的实例:

    //测试打开数据库的操作
    string connString = "Data Source=.;Initial Catalog=QQMaster;User ID=sa;Password=密码";
    //创建SqlConnection的对象
    SqlConnection conn = new SqlConnection(connString);
    try
    {
    //打开数据库连接
    conn.Open();
    Console.WriteLine("打开数据库连接成功!");
    }
    catch (Exception ex)
    {
    Console.WriteLine("出现异常:"+ex.Message);
    }
    finally
    {
    conn.Close();
    Console.WriteLine("关闭数据库连接成功!!");
    Console.ReadLine();
    }
    经验:catch可以放多个,其中的参数是子类和父类Exception ex(ex.Message),父类参数的放在最后一个。


    2.Command对象:对数据库执行命令(增删改)

    常用属性:
    1.Connection:Command 对象使用的数据库连接
    2.CommandText 执行对的sql语句
    常用方法:
    1.int ExecuteNonQuery() 执行不返回行的语句,如UPDATE等(增,删,改均如此)

    2.SqlDataReader ExecuteReader()或SqlDataReader ExecuteReader(CommandBehavior behavior)执行查询命令,返回DataReader对象

    3.object ExecuteScalar()返回单个值,如执行count(*).如求学生总数可以加weher条件查某一个班的学员总数

    要使用Command对象,必须有一个可用的Connection对象,使用Command对象的步骤:
    1.创建数据库连接(创建Connection对象)
    2.定义执行的sql语句
    3.创建command对象
    使用已有的Connection对象和sql语句字符串创建一个Command对象
    4.执行sql语句
    使用Command对象的某个方法执行命令.

    数据库查询实例:

    class DBOperation
    {
    //数据库连接字符串
    string strCoon = "Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=19960106";
    ///<param name = "UserName">用户名</par6666666am>
    ///<param name = "pwd">密码</param>
    ///<param name = "strMsg">返回的处理信息</param>
    ///<return>成功&失败</return>
    public bool CheckedUserInfo(String userName, String pwd, ref string strMsg)
    {
    //创建数据库连接
    SqlConnection conn = new SqlConnection(strCoon);
    //异常处理
    try
    {
    //创建sql语句
    string strSql = "select count(*) from Admin where LoginId ='" + userName + "'and Loginpwd='" + pwd + "'";
    //打开与数据库的连接
    conn.Open();
    //创建Command命令
    SqlCommand comm = new SqlCommand(strSql, conn);
    int Reta = (int)comm.ExecuteScalar();//强制转换为int类型
    if (Reta !=1)
    {
    strMsg = "输入无效,用户或密码错误";
    return false;
    }
    else
    {
    Console.WriteLine("登录成功!");
    return true;
    }
    }
    catch (Exception ex)
    {
    strMsg = "发生异常!" + ex.Message;
    return false;
    }
    finally
    {
    //创建SchoolManager类的对象
    SchoolManager sm = new SchoolManager();
    sm.SystemMenu();//调用SchoolManager类的显示系统菜单的方法
    //关闭数据库
    Console.WriteLine("数据库连接已关闭!");
    conn.Close();
    }
    }
    /// <summary>
    /// 查询学员人数
    /// </summary>
    /// <returns>-1:失败;其他:成功</returns>
    public int GetStudentAmount()
    {
    //创建SqlConnection对象
    SqlConnection conn = new SqlConnection(strCoon);
    try
    {
    //将要查的sql语句赋给一个字符串类型的变量
    string strSql = "select count(*) from Student";
    //建立数据库连接
    conn.Open();
    //创建SqlCommand对象 ,将数据源字符串变量和将要查的Sql语句的字符串变量两个参数放入。
    SqlCommand comm = new SqlCommand(strSql, conn);
    //执行Command对象中的方法查询
    int iRet = (int)comm.ExecuteScalar();
    return iRet;

    }
    catch (Exception)
    {
    //异常返回-1
    return -1;
    }
    finally
    {
    //关闭数据库
    conn.Close();
    }

    }
    }

    3.DataReader对象:负责从数据源读取只进且只读的数据流(一次查询多行多列的数据)

    StringBuilder类不像String类具有很多字符串处理的方法,但是在替换,添加或删除字符串时,
    StringBuilder类对象的执行速度要比String类的对象快得多。

    语法:

    //声明一个空的StringBuilder类的对象

    StringBuilder 对象名称 = new StringBuilder();
    //声明一个StringBuilder对象,值为“字符串初始值”

    StringBuilder 对象名称 = new StringBuilder("字符串初始值")

    StringBuilder常用的属性和方法
    属性:
    Capacity:获取或设置可包含在当前对象所分配的内存中的最大字符个数
    Length:获取或设置当前对象的长度

    StringBuilder Append(string value):在结尾追加

    StringBuilder AppendFormat(string format,object arg0,object arg1):添加特定格式的字符串

    StringBuilder Insert(int index,string value):在指定位置插入指定字符串

    Remove(int styartIndex,intLength):移除指定字符串

    【DataReader对象的主要属性和方法】

    属性:

    HasRows:布尔型的返回结果,有结果返回true,反之false。
    FieldCount:当前行中的列数
    方法:

    bool Read():前进到下一行记录,读到记录为true,反之false。
    void Close():关闭DataReader对象。
    创建和使用DataReader对象的步骤:
    (1):创建Command对象。
    (2):调用Command对象的ExecuteReander()方法返回一个DataReader对象。
    (3):调用DataReader的Read()方法,逐行读取查询结果集的记录。
    (4):读取当前行的某列的数据。
    如(type数据类型)dataReader[列名或列的索引],(string)dataReader["StudentName"]取到的列值为object类型需要类型转换。
    (5):关闭DataReader对象,调用它的Close()方法。


    4.DataAdapter对象:负责数据集和数据库的联系(用数据源填充DataSet并解析更新)

    DataAdapter对象的常用属性

    DataAdapter对象的工作步骤一般有两种,一种是通过Command对象执行SQL语句,将获得的结果集填充到DataSet对象中;另一种是将DataSet里更新数据的结
    果返回到数据库中。

    DataAdapter对象的常用属性形式为 XXXCommand,用于描述和设置操作数据库。使用DataAdapter对象,可以读取、添加、更新和删除数据源中的记录。对于每
    种操作的执行方式,适配器支持以下4个属性,类型都是Command,分别用来管理数据操作的“增”、“删”、“改”、“查”动作。

    SelectCommand属性:该属性用来从数据库中检索数据。

    InsertCommand属性:该属性用来向数据库中插入数据。

    DeleteCommand属性:该属性用来删除数据库里的数据。

    UpdateCommand属性:该属性用来更新数据库里的数据。

    例如,以下代码能给DataAdapter对象的selectCommand属性赋值。

    //连接字符串

    SqlConnection conn;

    //创建连接对象conn的语句

    // 创建DataAdapter对象

    SqlDataAdapter da = new SqlDataAdapter;

    //给DataAdapter对象的SelectCommand属性赋值

    Da.SelectCommand = new SqlCommand("select * fromuser", conn);

     

    同样,可以使用上述方式给其他的InsertCommand、DeleteCommand和UpdateCommand 属性赋值。

    当在代码里使用DataAdapter对象的 SelectCommand属性获得数据表的连接数据时,如果表中数据有主键,就可以使用CommandBuilder对象来自动为这个
    DataAdapter对象隐形地生成其他3个InsertCommand、DeleteCommand和UpdateCommand 属性。这样,在修改数据后,就可以直接调用Update方法将修改后的数
    据更新到数据库中,而不必再使用InsertCommand、 DeleteCommand和UpdateCommand这3个属性来执行更新操作。

    【ADO.NET总结】

     

    在对数据源执行操作时,可能会执行数据更新(增,删,改)操作或查询操作。对于查询操作可能存在两种情况:一是查询获得单个值,二是查询获得若干条记
    录。

    一.查询单个值

    1.需要使用Command对象的ExecuteScalar()方法,步骤如下。
    (1):创建Connection对象。

    (2):拼写Sql查询语句。

    (3):使用Sql语句和Connection对象创建Command对象

    (4):打开数据库连接,调用Connection对象的Open()方法。

    (5):调用Command对象的ExecuteScalar()方法,返回单个值。

    (6):操作完成后关闭数据库连接,调用Connection对象的Close()方法。

    二.查询若干条记录

    2.需要使用Command对象的ExecuteReader()方法,步骤如下
    (1):创建Connection对象。

    (2):拼写Sql查询语句。

    (3):使用Sql语句和Connection对象创建Command对象

    (4):打开数据库连接,调用Connection对象的Open()方法。

    (5):调用Command对象的ExecuteReader()方法,返回一个DataReader对象。

    (6):在循环中(While循环比较方便)调用DataReader对象的Read()方法。逐行读取记录。若读到记录,则返回true;否则返回false。

    (7):使用(type)DataReader对象[列名或索引]的方式读取这一行中某一列的值。

    (8):调用DataReader对象的Close()方法,关闭DataReader对象。

    (9):操作完成以后,关闭数据库连接,调用Connection对象的Close()方法。

    三.数据更新操作

    3.对数据库执行数据更新(增,删,改)操作时,都使用Command对象的ExecuteNonQuery()方法.步骤如下。
    (1):创建Connection对象。

    (2):拼写Sql增,删,改语句。

    (3):使用Sql语句和Connection对象创建Command对象

    (4):打开数据库连接,调用Connection对象的Open()方法。

    (5):调用Command对象的ExecuteNonQuery()方法执行命令,返回数据库中受影响的行数。(-1:异常,int类型的返回值)

    (6):操作完成后关闭数据库连接,调用Connection对象的Close()方法。

    【Command对象的三种方法的对比如下所示】

     

    【1】:ExecuteScalar()方法:执行查询(单个值)操作,并返回结果集中的第一行第一列。

    【2】:ExecuteReader()方法:执行查询(若干值)操作,返回DataReader对象。(方法中可返回string类型的和

    SqlDataReader对象作为返回值返回一个SqlDataReader对象)

    【3】:ExecutenNonQuery()方法:执行增,删,改操作,返回受影响的行数(int类型-1:异常)。

  • 相关阅读:
    02 _ 该如何选择消息队列
    封装、抽象、继承、多态分别可以解决哪些编程问题?
    04 _ 理论一:当谈论面向对象的时候,我们到底在谈论什么?
    03 _ 面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
    接口使用
    结构体和方法
    通道的高级玩法
    通道的基本操作
    极客时间 mp3提取
    iOS多线程中的单例
  • 原文地址:https://www.cnblogs.com/java-123/p/8694902.html
Copyright © 2011-2022 走看看