栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#使用ADO.NET访问数据库

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#使用ADO.NET访问数据库

文章目录
  • C#使用ADO.NET访问数据库
    • 1.常用的数据库访问技术
    • 2.认识ADO.NET技术
      • 1.ADO.NET的命名空间及导入
      • 2.ADO.NET的工作原理及访问架构
        • 1.各种数据库/数据源
        • 2..NET数据提供程序
        • 3.数据集DataSet
    • 3.客户端应用程序基于ADO.NET的两种数据访问模式
      • 1.通过DataSet访问数据(数据集断开式数据访问模式)
      • 2.通过DataReader对象访问数据(连接式数据访问模式)
      • 3.ADO.NET访问sql的步骤
        • 1.使用连接对象SqlConnection连接数据源
        • 2.打开连接
        • 3.操作数据库
        • 4.关闭连接
    • 4.具体示例及完整代码
      • 1.“删除”按钮的Click事件代码:
      • 2.使用SqlCommand对象的ExecuteReader() 方法读取单行数据。该程序根据用户指定的学生学号,查找与该学号对应的学生姓名、性别和身高,并将结果显示在页面上
      • 3.使用SqlDataAdapter和DataSet对象读取数据。该程序将用表格的形式显示stu表中全体学生的详细信息

C#使用ADO.NET访问数据库 1.常用的数据库访问技术
  • 开放式互连技术(ODBC)
  • 对象链接与嵌入式数据库技术(OLE DB)
  • Java数据库互连技术(JDBC)
  • ActiveX数据库对象技术(ADO)
  • ADO.NET技术等
2.认识ADO.NET技术

ado.net是一组用于和数据源进行交互的面向对象类库,用于实现用户到SQL Server等数据源的连接,为用户利用SQL语句实现对数据源中数据的查询、处理和更新提供支持。

1.ADO.NET的命名空间及导入

Microsoft将数据类划分成不同的命名空间。在ADO.NET中,主要涉及三个命名空间:

System.Data
System.Data.SqlClient
System.Data.Oledb

用using 导入命名空间,例:

using System.Data;
2.ADO.NET的工作原理及访问架构

ADO.NET是.NET框架中的数据访问模型,包含了两个核心组件:

  • 数据提供程序.NET Framework

    提供程序负责与物理数据源的连接,用于实现对底层数据源的访问

  • 数据集DataSet

    代表实际的数据

ADO.NET的三层数据访问架构:

各种数据库/数据源 <=> .NET数据提供程序 <=> 数据集DataSet

1.各种数据库/数据源

是指物理层的数据存储,可以是SQL Server、Oracle、MySQL、Access等物理数据库/数据源。

2…NET数据提供程序

在.NET数据库应用程序中,用户通过一个.NET的数据提供者同数据库交互

Connection 事务:建立与特定数据源的连接
Command 参数:对数据源执行操作命令(增删改查)
DataReader 以顺序且只读的方式从数据源中读取数据
DataAdapter 数据适配器,使用Command对象对数据源执行SQL命令,将数据从数据库读到数据集
* SelectCommand
* InsertCommand  ======填充=====> DataSet
* DeleteCommand
* UpdateCommand
3.数据集DataSet

可把数据集DataSet看成是内存中的数据库,是专门用来处理从数据库中读出的数据的。

在从数据库完成数据查询后,查询出的数据就存放在DataSet中,它是从数据源中查询到的数据在内存中驻留的表示形式,可以把它看成是内存中的数据库。

因此,DataSet是不依赖于数据库的独立数据集合,即使断开数据链路,或者关闭数据库,DateSet依然是可用的。

3.客户端应用程序基于ADO.NET的两种数据访问模式 1.通过DataSet访问数据(数据集断开式数据访问模式)

是指不直接对数据库进行操作,而是先实现数据库连接,再通过DataAdapter填充DataSet对象,然后客户端再通过读取DataSet来获取需要的数据。同理,在更新数据库中的数据时,也是先更新DataSet,然后再通过DataAdapter来更新数据库中对应的数据。

2.通过DataReader对象访问数据(连接式数据访问模式)

是指客户在操作过程中,与数据库的连接是打开的,使用Command对象对数据库的相关操作,使用DataReader对象以顺序方式读取数据。

3.ADO.NET访问sql的步骤 1.使用连接对象SqlConnection连接数据源
// 定义连接字符串
string str = "Server=DESKTOP-4HSQLSI\LRC;database=cs172;integrated security=true";
// string str = "Server=DESKTOP-4HSQLSI\LRC;database=cs172;uid=登录名;pwd=密码";
// stirng str = "Data Source=DESKTOP-4HSQLSI\LRC;Initial Catalog=cs172;integrated security=true";

// 定义数据库连接对象并初始化
SqlConnection sqlConn = new SqlConnection(str);
2.打开连接
sqlConn.Open();
3.操作数据库
  • SqlCommand对象的常用属性和方法
属性或方法说明
CommandText设置或获取在数据源上执行的SQL语句或存储过程名
Connection设置或返回与Command相关的Connection对象
CreateCommand()用于建立sqlCommand对象
ExecuteReader()执行CommandText中的SQL查询语句,查询值返回到DataReader对象
ExecuteScalar()返回单个值,如求和、求最大值等SQL聚合函数
ExecuteNonQuery()执行增、删、改等无返回值的SQL操作
  • 增删改:建立SqlCommand对象,执行SQL语句或存储过程对数据进行增删改。

    SqlCommand对象用于通过Connection对数据库下达操作数据库的命令

    // 定义SQL语句字符串(增删改)
    string sql = string.Format("delete from cenJi where xueHao='{0}'", xueHao.Text.Trim());
    // 定义数据库命令对象cmd并初始化
    SqlCommand cmd = new SqlCommand(sql,sqlConn);
    // 执行命令
    cmd.ExecuteNonQuery();
    
  • 查询:建立SqlCommand对象,执行SQL语句或存储过程后对返回的“结果”进行操作:

    • 方法一:使用数据读取器对象DataReader直接一行一行地读取数据集;

      遍历DataReader中的记录

      Command对象在执行ExecuteReader()方法后,在返回记录的同时,将产生一个数据读取器对象DataReader来指向所返回的记录集,利用DataReader就可以读取返回的记录。

      DataReader对象用于以最快的速度检索并检查查询所返回的行,返回的记录是一种只读的且指针只能前移的数据流

     // 定义一个数据读取器对象
    SqlDataReader sqlData = command.ExecuteReader();
     //处理数据读取器sreader中的数据
    // Read()使sqlDataReader移到下一条记录,SqlDataReader的默认位置在第一条记录前面
     if (sqlData.Read())
     {
         xinMin.Text = sqlData["xinMin"].ToString();
    	xinBie.Text = sqlData["xinBie"].ToString();
    	senGao.Text = sqlData["senGao"].ToString();
     }
    //关闭DataReader对象
    sqlData.Close();
    
    • DataReader对象的常用属性和方法
    属性或方法说明
    FieldCount当前行中的列数
    ItemDataReader中列的值
    HasRows指出DataReader是否包含一行或多行
    Close()关闭DataReader对象
    GetName()获取指定列的名称
    GetValue()获取指定序号处的列的值
    Read()使DataReader移到下一条记录,返回True表示还有下一条数据,否则表示数据读取完毕
    • 方法二:使用数据集对象DataSet和数据适配器对象DataAdapter来访问数据库。
    // sql语句
    string sql = "select *from xueSen";
    //定义一个数据库适配器对象
    SqlDataAdapter sda = new SqlDataAdapter(sql, sqlConn);
    //定义一个数据集对象
    DataSet dataSet = new DataSet();
    //将查询结果填充数据集对象,并用一个表的别名"ds"标记
    sda.Fill(dataSet, "ds");
    //指定dateGridView的数据源,dataGridView是以表格方式显示数据的控件
    dataGridView1.DataSource = dataSet;
    dataGridView1.DataMember = "ds";
    

    ​ DataAdapter对象(数据适配器对象),是DataSet对象与数据源之间的桥梁,负责从数据源中检索数据,并把检索到的数据填 充到DataSet对象中的表;同时,也把用户对DataSet对象的更改写到数据源中。

    ​ DataAdapter一般要与DataSet共同使用,来操作数据库中的数据。

    • DataGridView控件的常用属性
    属性说明
    Columns所有列的集合
    Rows所有行的集合
    DataSource数据源
    DataMember显示的表的名称
    RowCount获取或设置DataGridview中的显示行
    ReadOnly是否可编辑单元格
    SelectedIndex获取选中行的索引
    SelectedRow获取选中的行
4.关闭连接
//关闭与数据库的连接
sqlConn.Close();
4.具体示例及完整代码
  • 通过vs自带的window窗体来实现
1.“删除”按钮的Click事件代码:
private void button1_Click(object sender, EventArgs e)
{
    // 定义连接字符串
    string str = "Server=DESKTOP-4HSQLSI\LRC;database=cs172;integrated security=true";
    // string str = "Server=DESKTOP-4HSQLSI\LRC;database=cs172;uid=登录名;pwd=密码";
    // stirng str = "Data Source=DESKTOP-4HSQLSI\LRC;Initial Catalog=cs172;integrated security=true";
    

    // 定义数据库连接对象并初始化
    SqlConnection sqlConn = new SqlConnection(str);
    sqlConn.Open();
    try
    {
        // 定义SQL语句字符串(增删改)
        string sql = string.Format("delete from cenJi where xueHao='{0}'", xueHao.Text.Trim());

        // 定义数据库命令对象cmd并初始化
        SqlCommand cmd = new SqlCommand(sql,sqlConn);

        // 执行命令
        cmd.ExecuteNonQuery();

        MessageBox.Show("删除成功!", "提示");
    }
    catch(Exception i)
    {
        MessageBox.Show(i.ToString(), "错误");
    }
    sqlConn.Close();
}
2.使用SqlCommand对象的ExecuteReader() 方法读取单行数据。该程序根据用户指定的学生学号,查找与该学号对应的学生姓名、性别和身高,并将结果显示在页面上
private void Search_Click(object sender, EventArgs e)
{
    string str = "Server = DESKTOP-4HSQLSI\LRC;database=cs172;integrated security=true";
    SqlConnection sqlConnection = new SqlConnection(str);
    sqlConnection.Open();
    try
    {
        string sql = "select xinMin,xinBie,senGao from xueSen where xueHao='" + xueHao.Text.Trim() + "'";
        // string sql = string.Format("select xinMin,xinBie,senGao from xueSen where xueHao={0}", 						xueHao.Text.Trim());
        SqlCommand command = new SqlCommand(sql, sqlConnection);

        // 定义一个数据读取器对象
        SqlDataReader sqlData = command.ExecuteReader();

        //处理数据读取器sreader中的数据
        if (sqlData.Read())
        {
            xinMin.Text = sqlData["xinMin"].ToString();
            xinBie.Text = sqlData["xinBie"].ToString();
            senGao.Text = sqlData["senGao"].ToString();
        }
        else
        {
            MessageBox.Show("该学生不存在!", "提示");
        }

        //关闭DataReader对象
        sqlData.Close();

        sqlConnection.Close();
    }
    catch(Exception i)
    {
        MessageBox.Show(i.ToString(), "错误");
    }
}
3.使用SqlDataAdapter和DataSet对象读取数据。该程序将用表格的形式显示stu表中全体学生的详细信息
private void Form1_Load(object sender, EventArgs e)
{
    string str = "Server = DESKTOP-4HSQLSI\LRC;database=cs172;integrated security=true";
    SqlConnection sqlConn = new SqlConnection(str);
    sqlConn.Open();

    // sql语句
    string sql = "select *from xueSen";

    //定义一个数据库适配器对象
    SqlDataAdapter sda = new SqlDataAdapter(sql, sqlConn);

    //定义一个数据集对象
    DataSet dataSet = new DataSet();

    //将查询结果填充数据集对象,并用一个表的别名"ds"标记
    sda.Fill(dataSet, "ds");

    //指定dateGridView的数据源,dataGridView是以表格方式显示数据的控件
    dataGridView1.DataSource = dataSet;
    dataGridView1.DataMember = "ds";

    //关闭与数据库的连接
    sqlConn.Close();
}

, sqlConn);

//定义一个数据集对象
DataSet dataSet = new DataSet();

//将查询结果填充数据集对象,并用一个表的别名"ds"标记
sda.Fill(dataSet, "ds");

//指定dateGridView的数据源,dataGridView是以表格方式显示数据的控件
dataGridView1.DataSource = dataSet;
dataGridView1.DataMember = "ds";

//关闭与数据库的连接
sqlConn.Close();

}



















转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/908152.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号