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 自动释放资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值