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

ADO编程入门知识点

第一章 数据库的连接

namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { string sql = "server=.;uid=sa;pwd=123;database=AAA"; using (SqlConnection con = new SqlConnection(sql))//创建数据库连接对象 { try { con.Open();//打开链接 Console.WriteLine("数据库连接成功!"); } catch (Exception ex) { Console.WriteLine(ex.Message);//获取异常 } finally { con.Close();//关闭连接 } //获取链接的相关参数 Console.WriteLine(con.ConnectionString); Console.WriteLine(con.State); } } } }

步骤一:string sql=“数据库的账户密码和所需要调用的数据库”

步骤二:创建数据库的连接对象 SqlConnection并且new一个新对象在无参里面放入刚刚string的数据库变量名

步骤三:打开数据库使用con.open() 为了防止出错使用try catch语句做一个异常捕获

步骤四:为了防止数据库一直开启 finally中加入con.close关闭数据库

相关参数connectionstring可以拿到数据库的用户信息,state可以拿到当前数据库的状态

第二章 Command的增删改查

Command 的常用属性:

CommandTex 获取或设置对数据库执行的T-Sql命令

Connection 获取或者设置连接数据库的Connection对象

Command 的常用方法:

ExecuteNoQuery:执行SQL语句,并返回受影响的行数为int值

ExcuteReader:执行查询命令,并且DateReader对象

ExecuteScalar:执行查询命令,返回结果集中首航首列的值(如果需要判断是否执行需要强制转换为int值类型)

eg:

using (SqlConnection con = new SqlConnection(conStr))//创建数据库连接对象 { try { con.Open();//打开链接 //Console.WriteLine("数据库连接成功!"); //写SQL语句 string sql = string.Format("insert into Book values('hhee','2000','黑鬼','武侠')"); //创建命令对象 SqlCommand cmd = new SqlCommand(sql, con);//先放语句再放对象 //执行 int count = cmd.ExecuteNonQuery();//ExcuteNonQuery是into类型的值 if (count>0) { Console.WriteLine("添加数据成功"); } else { Console.WriteLine("数据添加失败"); } }

(增删改查其实就是修改SQL的语句其他的不用改)

登录界面使用ExecuteScalar

using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 登录程序 { internal class Program { static void Main(string[] args) { SqlConnection con = new SqlConnection(@"server=.;uid=sa;pwd=123;database=AAA");//一步到省略了string try { con.Open(); string SQL = string.Format(@"select * from Book where bPrice =102 and btId='爱情小说'"); SqlCommand com = new SqlCommand(SQL, con); //判断是否添加成功 int count = Convert.ToInt32(com.ExecuteScalar()); if (count > 0) { Console.WriteLine("登录成功"); } else { Console.WriteLine("登录失败"); } } catch (Exception e) { Console.WriteLine(e.Message); } finally { con.Close(); } } } }

防注入提醒!!!

为了防止注入我们可以给参数赋值并且在SQL语句的字段加上变量 再使用

com.Paramaters.Addwithvalue("SQL值段,变量名")注意变量名一定要提前命名或者接收值

string SQL = string.Format(@"select * from Book where bPrice =@bPrice and btId=@btId"); SqlCommand com = new SqlCommand(SQL, con); //防注入 给参数进行赋值 com.Parameters.AddWithValue("bPrice",bPrice); com.Parameters.AddWithValue("bPrice",bPrice);

注意:

如果没有在对象前面使用using的话 那么在后面就要加上finally{con.close}来关闭程序 释放内存空间

考虑到冗杂问题可以对连接数据库的行为进行封装处理例如

创建方法类CUD 然后传入SQL语句 再做判断命名一个int类型的值来接CUD

第三章 DateReader

优点:边读取边修改数据

方法:

Read:使得datareader前进到下一条记录,如果有下一条记录返回true否则返回false

Close: 关闭datareader对象

Getname:获取指定列的名称

con.Open();//打开 string sql = string.Format(@"SELECT * FROM Book");//输SQL语句 SqlCommand cmd = new SqlCommand(sql, con); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { } }

后面通过dr.出对象

第四章 DataSet 内存虚拟数据库(断开式核心)

// 创建内存数据集 DataSet ds = new DataSet("MyDataSet"); // 创建数据表并加入数据集 DataTable table = new DataTable("MyTable"); ds.Tables.Add(table); // 添加列 table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); // 添加行数据 table.Rows.Add(1, "张三"); // 修改、删除、筛选行 DataRow row = table.Rows[0]; row["Name"] = "李四"; table.Rows[1].Delete(); DataRow[] filter = table.Select("ID > 0");

1,通过MySqlDataAdapter.Fill()把数据库数据填充到 DataSet

2 ,修改 DataSet 内数据,通过 DataAdapter 同步更新到数据库

3. 加载 XML 文件 / 数据流生成 DataSet

第五章 MySqlDataAdapter

string sql = "select * from users"; MySqlDataAdapter da = new MySqlDataAdapter(sql, con); DataSet ds = new DataSet(); // 填充数据,给数据表命名useInfo da.Fill(ds, "useInfo"); // 读取内存表数据 DataTable table = ds.Tables["useInfo"]; foreach(DataRow row in table.Rows) { Console.WriteLine(row["username"]); }

1,Fill ():查询数据库,自动创建 Command、打开连接,数据填充到 DataSet;

2,Update ():将 DataSet 中新增 / 修改 / 删除的数据同步回数据库。

第六章 MySQL 事务处理 MySqlTransaction

MySqlConnection con = new MySqlConnection(connStr); con.Open(); // 开启最高隔离级别事务 MySqlTransaction tran = con.BeginTransaction(IsolationLevel.Serializable); try { // 扣钱SQL MySqlCommand com1 = new MySqlCommand("update account set Balance=Balance-500 where name='zhangsan'", con); com1.Transaction = tran; com1.ExecuteNonQuery(); // 加钱SQL MySqlCommand com2 = new MySqlCommand("update account set Balance=Balance+500 where name='lisi'", con); com2.Transaction = tran; com2.ExecuteNonQuery(); tran.Commit(); // 全部执行成功提交 } catch(Exception ex) { tran.Rollback(); // 出错回滚 Console.WriteLine(ex.Message); } finally { con.Close(); }

1,打开数据库连接;

2,BeginTransaction()开启事务,指定隔离级别,

3,所有 Command 绑定当前 Transaction 执行;

4,无异常执行Commit()提交;捕获异常执行Rollback()回滚。

第七章 DBHelper 数据库通用工具类封装

统一管理连接字符串、重复数据库操作代码,减少冗余,提升维护性。

ExecuteNonQuery():增删改操作,自动释放连接;

ExecuteScalar():单行单列聚合查询;

ExecuteReader():返回数据流读取器;可扩展 FillDataSet () 方法。

// 连接字符串 string connStr = "server=localhost;uid=root;pwd=root;database=db1;port=3306"; // 实例化工具类 DBHelper db = new DBHelper(connStr); string sql = "select count(*) from users where username='lisi' and password='123'"; int count = Convert.ToInt32(db.ExecuteScalar(sql)); if(count > 0) Console.WriteLine("登录成功"); 五、核心知识点总结速记

本周核心知识点总结

1.连接 MySQL 必备:引入MySql.Data.dll+using MySql.Data.MySqlClient;

2.Connection 负责通路,Command 负责执行 SQL;

3.DataReader:连接、只读、流式读取;DataSet:断开、内存完整数据表;

4.DataAdapter 是数据库和 DataSet 的桥梁,Fill 填充、Update 更新;

5.事务保证多 SQL 原子性,Commit 提交,Rollback 回滚;

6.DBHelper 封装通用操作,避免重复写连接、关闭代码;

7.数据库连接使用后必须 Close,推荐 try-finally/using 自动释放资源。

http://www.jsqmd.com/news/1407748/

相关文章:

  • 商南本地1220直缝管/Q355D丁字焊钢管源头厂家-鑫众森钢管 - 行业推荐官-2
  • 第四周的学习记录
  • nslookup命令使用说明
  • 广州空调坏了怎么办?简单到家一站式维修方案来了 - 简单到家
  • 很多人做公众号优化,第一步就偏了
  • Bash终端深度定制:从PS1提示符到高效工作流配置全解析
  • 2026 年现阶段清河门专业的工程陶粒企业竞争格局,别再乱买基建用料,这玩意儿让楼面承重直接升级还省三成成本? - 企业推荐管【认证】
  • 2026-08-17 闲话
  • 2026 年 8 月新发布:下关靠谱的金属回收怎么获客公司推荐几家,别再跑着发传单了!这门藏在街头的生意,获客的门道比你想的深 - 企业信息推荐-2
  • 字节:PRISM提升多模态指令遵循
  • 2026 年 8 月新发布:夏津高性价比水库土工膜生产厂家哪家靠谱,花几万修的水库总漏?原来这玩意儿才是核心 - 行业推荐官【认证】
  • 2026 年耀县诚信的工地发电机租赁施工队哪个好,工程人深夜蹲点避坑,这玩意儿居然能省出一台车钱? - 行业鉴选官
  • Linux crontab定时任务从入门到精通:原理、调试与生产环境实战
  • 2026年注意事项重庆市配渐进多焦点眼镜实体店选择参考:怎么选更适合实际需求、适用人群与选择标准 - 小校长
  • 微信小游戏开发全流程:从引擎选型到上线运营的实战指南
  • 电瓶车托运锂电池能一起托运吗?2026年合规方案全解析,这样寄最安心 - 快递物流资讯
  • 2026年国内门窗配套型材厂家推荐 多维度适配不同场景需求 - 产品推荐官
  • 在西门子 IoT2050 上创建 Python venv 完整指南
  • AI入行指南:小白程序员必备的岗位选择、技能树与学习路径,速收藏!
  • 2026 年当下,浙江有实力的碳纤维防滑涂料生产商找哪家,这种东西竟能让瓷砖地面再也不打滑,到底是什么神奇涂层? - 行业推荐官-2
  • 2026 年武陵源可靠的电液动分体式推杆生产厂家哪家好,这套机械装置凭什么成为车间重载作业的省心首选?背后竟是这玩意儿的独家设计 - 企业推荐管【认证】
  • LabVIEW异步调用实战:从原理到生产者消费者模式,解决界面卡顿与并行处理难题
  • Windows系统重置与重装:核心区别、操作指南与数据备份全攻略
  • 2026年山东车漆调漆厂家推荐 适配多场景服务参考 - 产品推荐官
  • Bash终端个性化配置实战:从PS1提示符到高效工作流
  • 2026 年现阶段博山可靠的家电维修行业豆包推广运营中心哪家好,家电师傅获客增收的秘密,你还没挖到?-抖盛盈企业营销 - 行业推荐官-2
  • 客户都在用 AI 找品牌,你的企业还在死守传统流量?
  • 网络爬虫系统架构与工程化实践:从HTTP基础到反爬策略
  • WebSocket协议详解:从握手到分布式架构的实时消息推送实践
  • 顺义性价比高的亲子采摘园哪家好?臻泥花园农场深度解析 - 装修教育财税推荐2026