第一章 数据库的连接
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 自动释放资源。

1736

被折叠的 条评论
为什么被折叠?



