当前位置: 首页 > article >正文

ADOADO.NET基础

ADO.NET是微软提供的一种数据库访问技术。

ADO.NET为不同类型的数据源提供了不同的数据提供程序对象:

一、使用DataReader读取数据

使用DataReader读取数据属于连接式读取,只能只进的一行一行读取数据,并且不能改变数据,

如需要改变数据,必须重新执行insert,update,delete等sql语句来改变数据。

示例:使用DataReader读取数据在ListView控件显示:

 

private void Form1_Load(object sender, EventArgs e)
{
    // 使用 DataReader 读取数据的步骤包括:
    // 1. 连接数据库
    // 2. 执行查询
    // 3. 读取数据  
     //编写连接字符串(windows方式)   a.udl
     // string connStr = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=adoNet;Data Source=.\r\n";
    // 1. 编写连接字符串(SQL Server 用户名密码认证方式)
    string connStr = "server=.;database=adoNet;uid=sa;password=123456";

    // 2. 创建连接对象并打开连接
    SqlConnection conn = new SqlConnection(connStr);
    conn.Open(); // 打开与数据库的连接

    // 3. 编写 SQL 查询语句
    string sql = "select * from Member"; // 查询所有会员信息

    // 4. 创建命令对象,并设置 SQL 语句和连接对象
    SqlCommand cmd = new SqlCommand(sql, conn);

    // 5. 执行 SQL 命令并获取 DataReader 对象
    SqlDataReader rd = cmd.ExecuteReader();

    // 6. 使用 DataReader 逐行读取数据,并将数据添加到 ListView 控件中
    while (rd.Read())
    {
        // 创建一个新的列表项,以会员ID作为主键
        ListViewItem item = new ListViewItem(rd["MemberID"].ToString());

        // 添加子项,包含会员账号、密码、姓名、电话等信息
        item.SubItems.Add(rd["MemberAccount"].ToString());
        item.SubItems.Add(rd["MemberPwd"].ToString());
        item.SubItems.Add(rd["MemberName"].ToString());
        item.SubItems.Add(rd["MemberPhone"].ToString());

        // 将新创建的列表项添加到 ListView 控件中
        this.lvMember.Items.Add(item);
    }

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

    // 显示会员总人数
    // 更改 SQL 命令文本为计算会员表中的记录数
    cmd.CommandText = "select count(*) from Member";

    // 执行标量查询,返回单个值
    int count = (int)cmd.ExecuteScalar();

    // 设置标签控件显示会员人数
    this.labCount.Text = "会员人数:" + count.ToString();

    // 最后,关闭数据库连接
    conn.Close();
}

二、使用DataAdapter的方式抽取数据

将数据库数据抽取到DataSet容器 ,通过修改容器修改数据库

DataSet是特意为独立于所有数据源的数据访问而设计的,可以理解成内存中的数据库。

在支持ADO.NET的断开式、分布式数据方案中起着重要的作用。

DataSet是数据驻留在内存中的表现形式,无论是什么数据源,它都可以提供一致的编程模型。

DataSet支持改变数据然后回传给数据库。

  • DataSet数据集里面可以包含多个DataTable数据表
  • 还可以保存表和表之间的关联

示例:使用DataAdapter抽取数据到DataTable中,在DataGridView中进行显示

dataGridView控件 列属性DataPropertyName 值实现对数据库表列名的绑定映射

此示例代码如下.

在编写代码之前需要对DataGridView控件进行编辑列操作。

设置DataGridView控件的AllowUserToAddRows=False实现清楚最后一个空行,SelectionMode=FullRowSelect实现整行选中模式,用户体验更好。

private void bindDate()
{
    // 1、编写连接字符串,包括SQL Server的实例名、数据库名、用户名及密码
    string connStr = "server=.;database=adoNet;uid=sa;password=123456";

    // 2、创建SqlConnection对象并使用连接字符串初始化
    SqlConnection conn = new SqlConnection(connStr);
    // 打开与数据库的连接
    conn.Open();

    // 3、编写查询语句,从Member表中选择所有记录
    string sql = "select * from Member";
    // 创建SqlDataAdapter对象,用于执行SQL命令并填充数据到DataTable
    SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);

    // 定义一个DataTable对象作为数据容器
    DataTable dt = new DataTable();
    // 使用SqlDataAdapter填充DataTable
    adapter.Fill(dt);

    // 将DataTable设置为DataGridView的数据源,以显示数据
    this.dataGridView1.DataSource = dt;

    // 修改查询语句,用于获取Member表中的记录总数
    adapter.SelectCommand.CommandText = "select count(*) from Member";
    // 执行查询并获取结果,即会员数量
    int count = (int)adapter.SelectCommand.ExecuteScalar();
    // 更新标签显示当前的会员人数
    this.lblCount.Text = "会员人数:" + count.ToString();

    // 关闭数据库连接
    conn.Close();
}

private void Form2_Load(object sender, EventArgs e)
{
    // 当窗体加载时,调用bindDate方法绑定数据
    bindDate();
}

private void btUpdate_Click(object sender, EventArgs e)
{
    // 1、编写连接字符串,包括SQL Server的实例名、数据库名、用户名及密码
    string connStr = "server=.;database=adoNet;uid=sa;password=123456";

    // 2、创建SqlConnection对象并使用连接字符串初始化
    SqlConnection conn = new SqlConnection(connStr);
    // 打开与数据库的连接
    conn.Open();

    // 3、编写查询语句,从Member表中选择所有记录
    string sql = "select * from Member";
    // 创建SqlDataAdapter对象,用于执行SQL命令并填充数据到DataTable
    SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);

    // 定义一个DataTable对象作为数据容器
    DataTable dt = new DataTable();
    // 使用SqlDataAdapter填充DataTable
    adapter.Fill(dt);

    // 添加新行到DataTable
    DataRow dr = dt.NewRow();
    dr["MemberAccount"] = "admin"; // 设置会员账号
    dr["MemberPwd"] = "123321"; // 设置会员密码
    dr["MemberName"] = "wyx"; // 设置会员姓名
    dr["MemberPhone"] = "1839hs3w"; // 设置会员电话
    // 将新行添加到DataTable中
    dt.Rows.Add(dr);

    // 修改DataTable中第二行的会员账号
    dt.Rows[1]["MemberAccount"] = "qwqqwqwqwqwwq";

    // 从DataTable中删除第四行
    dt.Rows[3].Delete();

    // 创建SqlCommandBuilder对象,自动构建适当的INSERT、UPDATE或DELETE语句
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
    // 将对DataTable所做的更改同步回数据库
    adapter.Update(dt);
    // 关闭数据库连接
    conn.Close();

    // 刷新数据显示,确保界面显示最新的数据库状态
    bindDate();
    // 显示消息框,通知用户数据更新成功
    MessageBox.Show("数据更新成功");
}

 

三、非查询操作

非查询操作分为"添加"“删除""修改“操作,这些操作处理sql语句不同,其他编码是一样的,

所以在此文档中以添加操作为例介绍非查询操作。

示例:添加会员信息

此示例的测试数据与文档第一部分测试数据相同。此示例中通过两种方式添加数据

  • (1)使用DataAdapter的command跟新数据
  • (2)直接使用SqlCommand对象跟新数据

此示例代码如下:

 //使用SqlDataAdapter对象完成添加数据
 private void button1_Click(object sender, EventArgs e)
 {    //数据库连接
     string connStr = "server=.;database=adoNet;uid=sa;pwd=123456";
     SqlConnection conn = new SqlConnection(connStr);
     conn.Open(); //打开数据库
     //编写sql语句
     string sql = string.Format("INSERT INTO Member (MemberAccount, MemberPwd, MemberName, MemberPhone)VALUES ('{0}', '{1}', '{2}', '{3}')",
         this.textAccount.Text, textPwd.Text, textName.Text, textIphone.Text);

     SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
     int code = adapter.SelectCommand.ExecuteNonQuery();
     conn.Close();
     if (code == 1)
          MessageBox.Show("添加成功");
        
     
     else
     
         MessageBox.Show("添加失败");
     

 }
 
  
 //使用SqlCommand对象添加数据
 private void button2_Click(object sender, EventArgs e)
 {
     //数据库连接
     string connStr = "server=.;database=adoNet;uid=sa;pwd=123456";
     SqlConnection conn = new SqlConnection(connStr);
     conn.Open();
     //sql语句
     string sql = string.Format("INSERT INTO Member (MemberAccount, MemberPwd, MemberName, MemberPhone)VALUES ('{0}', '{1}', '{2}', '{3}')",
         this.textAccount.Text, textPwd.Text, textName.Text, textIphone.Text);

     SqlCommand cmd = new SqlCommand(sql, conn);
     int code = cmd.ExecuteNonQuery();
     conn.Close();
     if (code == 1)
     {
         MessageBox.Show("添加成功");
     }
     else
     {
         MessageBox.Show("添加失败");
     }
 }


http://www.kler.cn/a/445195.html

相关文章:

  • JavaScript 中常见内置对象的知识点及示例总结
  • 【k8s集群应用】K8S二进制安装大致步骤(简略版)
  • linux---多线程
  • Redis的主从集群以及哨兵机制学习总结
  • 深度学习推理速度优化指南
  • 第二十四天 循环神经网络(RNN)基本原理与实现
  • OpenGL ES 03 加载3张图片并做混合处理
  • 四相机设计实现全向视觉感知的开源空中机器人无人机
  • 共创共建!葡萄城 SpreadJS 完成 HarmonyOS NEXT 操作系统兼容认证
  • tcp_ack函数
  • 前端模块化
  • 【ETCD】ETCD Leader 节点写入数据流程概览
  • 计算机基础知识复习12.20
  • LCD1602显示模块详解
  • 数说故事聚焦“卖车”场景,推出AI汽车销售转化解决方案
  • 【优选算法篇】揭秘快速排序:分治算法如何突破性能瓶颈
  • 完整微服务设计 功能实现
  • 【Spring】配置文件的使用
  • D99【python 接口自动化学习】- pytest进阶之fixture用法
  • 将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?
  • Altair: 轻松创建交互式数据可视化
  • Hexo Next主题集成百度统计
  • 进网许可认证、交换路由设备检测项目更新25年1月起
  • 占个坑:利用工作以外的时间,用numpy实现MLP-手写识别
  • Springboot 学习 之 logback-spring.xml 日志压缩 .tmp 临时文件问题
  • 学习反射(反射的使用,反射的应用场景)