Ado常用对象
Connection:
Connection: 用于连接数据库的对象,表示到数据源的一个唯一的连接。主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。
Command:
Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。
DataAdapter:
DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。
DataSet :
DataSet:表示内存中数据的缓存(可以视为一个暂存区),可以把它想像成一个临时的数据库,可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet可以存多个表DataTable、DataTableTable包含若干DataRow,而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。
DataReader:
DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能[通过游标(游标是处理结果集的一种机制,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据。)]读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。DataReader对象与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据库。但是DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。并且使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。
*总结
ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。
1、Connection (连接数据库) --连接对象
2、Command (执行T SQL语句) -------命名
3、DataAdapter (用户填充DataSet,断开模式) --数据适配器对象
4、DataReader (读取数据库,一种只读模式,只向前的) ---数据阅读器
5、DataSet (数据集,好比电脑的内存) -----数据集
Ado.net常用操作数据库语句(增删改查)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
using System.Data.SqlClient;//引用命名空间
using System.Data;
using Newtonsoft.Json;
namespace DAL
{
public class UserInfoDAL
{
/// <summary>
/// 验证用户信息
/// </summary>
/// <param name="user">用户对象</param>
/// <returns></returns>
public bool SelectUser(UserInfo user)
{
//1,连接数据库,实例化连接对象
string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";
SqlConnection conn = new SqlConnection(constr);
//1,2打开数据库
conn.Open();
//2,执行查询的sql命令
//string sql = "select * from UserInfo where User_Name='" + user.User_Name + "'and User_Pwd='" + user.User_Pwd+"'";
string sql = string.Format("select * from UserInfo where User_Name={0}& User_Pwd={1}", user.User_Name, user.User_Pwd);
//2.1实例化命令对象
SqlCommand cmd = new SqlCommand(sql, conn);
object result = cmd.ExecuteScalar(); //返回查询结果的第一行第一列
//2,2关闭连接
conn.Close();
//3,判断是否查询到结果成功
if (result!=null)
{
return true;
}
else
{
return false;
}
}
//2,插入用户信息
public bool insertUser(UserInfo user)
{
//1,建立和数据库的连接
//1.1实例化连接对象,连接字符串的设置可以通过实例化对象的时候使用,也可以通过设置属性
string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证
SqlConnection conn = new SqlConnection(constr);
//1.2打开连接
conn.Open();
//2,实例化命令对象
string sql = "insert into UserInfo values('" + user.User_Name + "','" + user.User_Pwd + "','" + user.User_Tel + "')";
//string sql2 = string.Format("insert into UserInfo values('{0}', '{1}', '{2}')", user.User_Name, user.User_Pwd, user.User_Tel);
SqlCommand cmd = new SqlCommand(sql,conn);
int rs = cmd.ExecuteNonQuery();
conn.Close();
//2.1执行完成命令,要关闭连接
if (rs > 0)
{
return true;
}
else
{
return false;
}
}
//3,查询所有用户信息
public DataTable SelectAllUser()
{
//1,建立和数据库的连接
//1.1创建连接字符串,连接字符串的设置可以通过实例化对象的时候使用,也可以通过设置属性
string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证
//2,实例化适配器对象
string sql = "select * from UserInfo";
//3,利用数据适配器和数据集来进行获取大量数据
SqlDataAdapter sda = new SqlDataAdapter(sql, constr);
//4,利用适配器对象来填充数据集(内存) 数据集(dataset) 是数据表(datatable)的集合 表的索引从0开始
DataSet ds = new DataSet();
DataTable table = new DataTable();
sda.Fill(ds);
////把datatable序列化成json字符串
////string json = JsonConvert.SerializeObject(ds.Tables[0]);
//List<UserInfo> list = new List<UserInfo>();
//for (int i = 0; i < table.Rows.Count; i++)
//{
// //int id = table.Rows[i].Field<int>("User_Id");
// UserInfo user = new UserInfo();
// object[] array = table.Rows[i].ItemArray;
// list.Add(user);
//}
return ds.Tables[0];
}
}
}
删除:delete
/// <summary>
/// 删除数据
/// </summary>
public static void DelRecord()
{
int res = -1;
string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证
SqlConnection conn = new SqlConnection();
conn.ConnectionString = sqlCon;
string sqlStr = "delete book where b_id=18";
SqlCommand cmd = new SqlCommand(sqlStr, conn);
conn.Open();
res = cmd.ExecuteNonQuery();
conn.Close();
//2.1执行完成命令,要关闭连接
if (rs > 0)
{
return true;
}
else
{
return false;
}
}
更新数据:update
/// <summary>
/// 软删除
/// </summary>
public static void SoftDelRecord()
{
int res = -1;
string constr = @"server=(localdb)\MSSQLLocalDB;database=Nes;uid=sa;pwd=123456";//sql server身份验证
SqlConnection conn = new SqlConnection();
conn.ConnectionString = sqlCon;
string sqlStr = "update book set b_isdel=1 where b_cid=103";
SqlCommand cmd = new SqlCommand(sqlStr, conn);
conn.Open();
res = cmd.ExecuteNonQuery();
conn.Close();
//2.1执行完成命令,要关闭连接
if (rs > 0)
{
return true;
}
else
{
return false;
}
}
查询操作:(控制台)select
(1)SqlCommand查询单个值 这里是参考CSDN
用ExecuteScalar()方法 ,返回单个值(Object)(查询结果第一行第一列的值)
public static void QuerySingle()
{
SqlConnection conn = new SqlConnection(sqlCon);
string sqlStr = "select * from book";
SqlCommand cmd = new SqlCommand(sqlStr, conn);
conn.Open();
//返回的是查询结果集第一单元格的值,返回的是object类型
object obj = cmd.ExecuteScalar();
conn.Close();
Console.WriteLine(obj.ToString());
}
(2)SqlCommand查询多行
用ExecuteReader()方法
/// <summary>
/// 查询多行数据---DataReader逐行读取,每次读一行
/// </summary>
public static void QueryList()
{
SqlConnection con = new SqlConnection(sqlCon);
string sqlStr = "select * from book";
SqlCommand cmd = new SqlCommand(sqlStr, con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())//dr每read()一次就读取一行
{
//read()后,dr就是一行数据
object o = dr["b_title"];
for (int i = 0; i < dr.FieldCount; i++)
{
Console.Write(dr[i].ToString() + "\t");
int a = dr.GetInt32(0);
}
Console.Write("\n");
}
// Console.WriteLine("有数据");
}
else
{
Console.WriteLine("无数据");
}
}
这里不做过多介绍,主要是为了方便自己的复习。如果需要详细(这里只做了演示)Demo链接: https://www.lanzous.com/ib4mdyj 如果有其他不理解自行百度
上述方法还有很多地方可以优化
Comments | NOTHING