zoukankan      html  css  js  c++  java
  • ADO.NET详解----核心对象的使用

    一、Connection对象

    指定某个具体数据源以及提供登陆方式及用户名与密码。

    Connection对象的主要成员:

        1、ConnectionString属性:连接字符串,指定要操作的数据库以及登录方式和用户名密码。

    连接字符串的两种配置过程:

    1. 利用ConnectionString直接在应用程序中配置。

    2. 利用配置文件配置。在WINFORM中利用App.config文件配置;在WEB中利用web.config文件配置。

      2、open()方法:打开与数据库的连接

    若在连接数据库过程中配置连接字符串错误,则在打开是会抛出异常。

        3、close()方法:数据访问完成后关闭连接

    连接数据库的步骤:

        1、定义连接字符串

    (1)使用SQL用户名,密码验证

    Data Source=服务器名称;Initial Catalog=数据库名;User ID=用户名;Pwd=密码(若没有密码,可省略)

    (2)使用WINDOWS身份验证

    Data Source=服务器名;Initial Catalog=数据库名;integrated security=sspi;

        2、创建Connection对象

    SqlConnection Connection = new SqlConnection(ConnString);

    其中ConnString为连接字符串

        3、打开与数据库的连接

    Connection.Open();

    源代码

    (1)添加应用程序配置文件(注意不要修改文件名称App.config),在configuration代码中输入一下配置代码

    1
    2
    3
    4
    5
    <configuration>
        <connectionString>
        <add name="MyConStr" ConnectionString=Data Source=服务器名称;Initial Catalog=数据库名;User ID=用户名;Pwd=密码>
        </connectionString>
    </configuration>

    在代码窗口下添加引用system.configuration,在窗口中输入一下代码:

    1
    2
    3
    4
    5
    6
    7
    public string MyConnString
    {
        get
        {
            return system.ConfigurationMnager.ConnectionStrings["MyConStr"].ConnnectionString.tostring
        }
    }

    以上方法便可以通过访问配置文件节点的方法连接数据库。

    (2)

    直接在代码框中输入以下代码,便可以直接连接数据库:

    1
    2
    3
    4
    5
    6
    7
    public string MyConnString
    {
        get
        {
            return"Data Source=服务器名称;Initial Catalog=数据库名;User ID=用户名;Pwd=密码" 
        }
    }

    二、Command对象

    执行命令并从数据源中返回结果。其命令的内容可以是Sql语句或者是一个存储过程。Command命令语句可以把Sql语句或者是存储过程通过connection的连接发送给数据源(数据库服务器),然后由数据库服务器执行这些命令,最后再把这些命令的结果通过Connection返回给应用程序。

    Command对象的主要成员:
        1、Connection属性:Command对象使用的数据连接。

        2、CommandText属性:执行SQL语句(增、删、查、改)。

        3、ExecuteNonQuery()方法:执行不返回行的语句,如update。

        4、ExecuteReader()方法:返回DataReader对象,查询结果直接存放在DateReader中,但是DataReader的实例化不是通过NEW语句实现,而是通过ExcuteReader方法来实现。

        5、ExcuteScalar:返回单个值(第一行第一列)。

    使用Command步骤:

        1、创建数据库连接。

        2、定义SQL语句。

        3、创建Command对象。

        4、执行命令。

    两种实例化连接对象的方法:

    (1)SqlConnection conn = new SqlConnection(MyConStr);

    (2)SqlConnection conn = new SqlConnection();

       conn.ConnectionString = MyConString;

    源代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public int ExcuteSQLReturnInt(string sql)
    {
        SqlConnection conn = new SqlConnection(MyConStr);
        try
        {
            SqlCommand cmd = new SqlCommand(sql,conn)
            //或者cmd.Connection = conn;
                //cmd.CommandText=sql
            if(conn.state==ConnectionState.close)
            {
                conn.Open();
            }
            int count = cmd.ExcuteNonQuery();
            return count;
        }
        catch(Exception ex)
        {
            return 0;
        }
        finally
        {
            conn.close();
            conn.dispose();
        }
    }
    1
    注:因为客户端传来的sql语句有可能存在语法问题或者存在注入攻击等问题,所以我们可以用try catch来抛出异常。

    若在sql语句中存在参数,则代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    public int ExcuteSQLReturnInt(string sql,SqlParameter[] pars)
    {
        SqlConnection conn = new SqlConnection(MyConStr);
        try
        {
            SqlCommand cmd = new SqlCommand(sql,conn)
            //或者cmd.Connection = conn;
                //cmd.CommandText=sql
            if(conn.state==ConnectionState.close)
            {
                conn.Open();
            }
            if(pars!=null&&pars.Length>0)
            {
                foreach(SqlParameter p in pars)
                {
                    cmd.Parameters.Add(p);
                }
            }
            int count = cmd.ExcuteNonQuery();
            return count;
        }
        catch(Exception ex)
        {
            return 0;
        }
        finally
        {
            conn.close();
            conn.dispose();
        }
    }

    三、DataAdapter 数据适配器对象

    通过DataAdapter可以将数据库中的数据传输到DataSet中,相当于数据运输的工具。

    注:使用DataAdapter前必须要完成Connection的连接工作。

    Dataadapter主要的属性和方法:

        1、SelectCommand属性:从数据库检索数据的Command对象。

        2、Fill()方法:向DataSet中的表填充数据。

        3、update()方法:将DataSet中的数据提交到数据库中。

    使用DataAdapter对象填充DataSet数据集的步骤:

        1、创建DataAdapter对象并且使用Connection连接数据源。

        SqlDataAdapter对象名 = new SqlDataAdapter(查询所用sql语句,数据库连接)

        2、使用Fill()方法填充DataSet中的表

        DataAdapter对象.fill(数据集对象,"数据表名称字符串")

    注:若无数据表名称,则会把数据默认放到数据集对象的第一个表中。

    源代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public DataSst SelectSqlReturnDataSet(string sql)
     
    {
        SqlConnection conn = SqlConnection(MyConnString);
        SqlAdapter sda = new SqlDataAdapter(sql,conn);
        DataSet ds = new DataSet();
        sda.fill(ds);
        return ds;
    }

    若Sql查询语句中含有参数,则修改代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public DataSst SelectSqlReturnDataSet(string sql,SqlParameter[] pars)
     
    {
        SqlConnection conn = SqlConnection(MyConnString);
        SqlAdapter sda = new SqlDataAdapter(sql,conn);
        if(pars!=null&&pars.Length>0)
        {
            foreach(SqlParameter p in pars)
            {
                sda.SelectCommand.Parameters.add(p);
            }
        }
        DataSet ds = new DataSet();
        sda.fill(ds);
        return ds;
    }

    若传输的既可能是Sql语句也可能是存储过程,则修改代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public DataSst SelectSqlReturnDataSet(string sql,SqlParameter[] pars,CommandType type)
     
    {
        SqlConnection conn = SqlConnection(MyConnString);
        SqlAdapter sda = new SqlDataAdapter(sql,conn);
        if(pars!=null&&pars.Length>0)
        {
            foreach(SqlParameter p in pars)
            {
                sda.SelectCommand.Parameters.add(p);
            }
        }
        sda.SelectCommand.CommandType = type;
        DataSet ds = new DataSet();
        sda.fill(ds);
        return ds;
    }

    四、DataReader对象

    用于在数据库中读取数据,一般用于读取一条数据(也可读取多条)。

    DataReader的主要属性和方法:

        1、HasRows属性:是否返回了结果。

        2、Read()方法:前进到下一条记录,返回结果为布尔值,读取之后若下一行有值则返回为true,若下一行没有值则返回false。    

        3、close()方法:关闭DataReader对象

    使用DataReader读取数据的基本步骤:

        1、创建Command对象。

        2、调用ExcuteReader()创建DataReader对象。

        3、调用DataReader的Read()方法逐行读取数据。

        4、读取某列的数据:(type)dataReader[]

        获取某列的值可以在上面的方括号中用以下两种表是方法:

            (1)指定列的索引,从0开始

            (2)指定列名

        5、关闭DataReader对象

    注:(1)DataReader是直接将数据库中的数据读取到用户的客户端(应用程序或者某个控件上)

        (2)DataReader使用后必须关闭

    源代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public SqlDataReader SelectSqlReturnDataReader(string sql)
    {
        SqlConnection conn = new SqlConnection(MyConnString);
        SqlCommand cmd = new SqlCommand(sql);
        if(conn.ConnectionState.closed())
        {
            conn.Open();
        }
        SqlDataReader reader = cmd.ExcuteReader(CommandBehavior.CloseConnection);
        return reader;
    }

    注:

    1
    CommandBehavior.CloseConnection 可以自动在应用程序读取完数据之后自动关闭连接

    五、DataSat

    DataSet数据集可以简单理解为一个临时数据库,可以将数据源的数据保存在内存中并且它是独立于任何数据库的。DataSet是由若干个DataTable组成的。

    创建DataSet基本步骤:

    创建一个DataSet,可以指定一个数据集的名称,如果不指定数据集的名称则系统默认为"NewDataSet"。

    DataSet 数据集对象 = new DataSet("数据集的名称字符串")

    源代码

    public DataTable SelectSqlReturnDataTable(string sql,SqlParameter[] pars,CommandType type)
    {
        SqlConnection conn = new SqlConnection(MyConnString);
        SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
        DataTable dt = new DataTable;
        sda.Fill(dt);
        return dt;
    }

    或者

    1
    2
    3
    4
    5
    6
    7
    8
    public DataTable SelectSqlReturnDataTable(string sql,SqlParameter[] pars,CommandType type)
    {
        SqlConnection conn = new SqlConnection(MyConnString);
        SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
        DataSet ds = new DataSet();
        sda.Fill(ds,"myTable");     //其中myTable为ds中的一张表
        return ds.tables["myTable"];
      }
     
  • 相关阅读:
    iStylePDF c#集成开发示例
    纯js 实现 HTML 元素拖拽,
    前端自动滚动
    双向选择排序(暂定)
    uniapp 分享链接
    Could not find a declaration file for module 'vue-xxx'.
    精通JavaScript(重点内容笔记)更新中...
    如何让DIV模块随着页面固定和不固定
    序列不包含任何匹配元素
    PHPStorm配置Apache服务器(wampServer 版)
  • 原文地址:https://www.cnblogs.com/darrenliu/p/4412666.html
Copyright © 2011-2022 走看看