ADO.NET笔记

ADO.NET

1.程序端数据集
DataSet、DataTable,DataRow、DataColumn...

可以将从数据库中查询的数据存放在程序缓存中,并提供一系列操作

2..NET Framework数据提供程序
Connection、DataAdapter、DataReader、Command
用来直接操作数据库


一、增删改操作
1.连接通道的连接字符串
int res=-1;准备接受新增影响的行数
string conStr=@"server=;database=;uid=;pwd=;";
string conStr=@"server=;database=;Integrated Security=True";(SQL Server中使用windows系统身份验证)

2.连接通道对象
SqlConnection conn=new SqlConnection(conStr);
或者
SqlConnection conn=new SqlConnection();
conn.ConnectionSting=conStr;

3.准备新增的sql命令
string sqlStr="Insert into Book(b_cid,b_title...) values()";

4.新建命令对象,并传进conn(连接)和要进行的操作的Sql语句
SqlCommand cmd=new SqlCommand(Sqlstr,conn);

5.打开通道
conn.Open();

6.调用方法去数据库执行sql语句
res.cmd.ExecuteNonQuery();//此方法负责增、删、改,返回受影响的行数(int)

6.关闭通道
conn.Close();

 

 

 

二、查询操作
注意Command对象的几个方法的区别
ExecuteScalar()  //调用此方法,获得查询语句在数据库执行后得到的结果集的第一个单元格的值,返回类型是Object

 

三、查询多行数据--DataReader逐行读取,返回一行数据
SqlConnection con=new SqlConnection(constr);
string sqlStr="select * from Book";
SqlCommand cmd =new SqlCommand(sqlStr,con);//在这里分别指定Command的CommandText和Connection

con.Open();
//声明一个读取器对象,并调用cmd的方法返回该对象
SqlDataReader dr=cmd.ExecuteReader();
if(dr.HasRows) //如果返回的数据行不为空则返回true
{
whlie(dr.Read()) //read方法,如果读到下一行数据,则返回true,而且dr本身就等于那一行数据
  {
     Console.WriteLine(dr[0].ToString());
//dr[0]指返回的对象是该行的第一列数据,这里也可以
使用dr[结果集的列名!!]
还可以使用dr.GetString(0),GetInt32()方法获得单元格的值,
dr.GetOrdinal("b_cid") //传入列名,找到它在结果集中的下标,返回int
dr.GetValue();获取单元格的值,返回Object
  }
}
dr.Close();//关闭读取器
con.Close();//关闭连接通道

 

四、使用适配器读取数据
无需代码开通连接通道,自动开通

SqlConnection con=new SqlConnection(conStr);
string sqlStr="select * from Book";

//创建适配器对象,告诉它要做的事情(sqlStr),走哪条路(con)
SqlDataAdapter da=new SqlDataAdapter(sqlStr,con);
//创建数据集对象(程序端的临时数据库)
DataSet ds=new Dataset();
//调用fill方法,填充数据集。(先去数据库查询结果集,并把结果集返回赋值给数据集)
da.fill(ds);

DataTable dt=ds.Table[0];
for(int i=0;i<dt.Row.Count;i++)
{
 DataRow dr=dt.Rows[i];
 Console.WriteLine(dr[0].ToString()); //访问行对象单元格dr[索引值或者列名]
}

上列的代码中可以直接将SqlDataAdapter 赋值给DataTable对象

 

五、调用存储过程
单个参数的存储过程
string conStr=@"server=;database=;Integrated Security=True";
SqlConnection con=new SqlConnection(conStr);

SqlCommand cmd = new SqlCommand("存储过程名称",con);
cmd.CommandType=CommandType.StoredProcedure;    //指定“命令类型”为存储过程
SqlParameter sp =new SqlParameter();   //指定存储过程中的“参数”

sp.ParameterName="@cateId";
sp.SqlDbType=SqlDbType.Int;
sp.Size=4; //设置参数长度
sp.Value=2;
cmd.Parameter.Add(sp);   //将“参数”对象加入到命令对象的参数集合中

SqlDataAdapter da = new SqlDataAdapter(cmd);

DataTable dt =new DataTable();
da.Fill(dt);

foreach(DataRow dr in dt.Rows)
{
  Console.WriteLine(dr[0].ToString()+"_"+dr[1].ToString() + "_"+dr["b_title"]);
}

 


六、调用存储过程
多个参数的存储过程

string conStr=@"server=;database=;Integrated Security=True";
SqlConnection con=new SqlConnection(conStr);

SqlCommand cmd = new SqlCommand("存储过程名称",con);
cmd.CommandType=CommandType.StoredProcedure;    //指定“命令类型”为存储过程
//多个参数
SqlParameter[] sp2 ={ new SqlParameter("@pageIndex",SqlDbType.Int,4),new SqlParameter("@pageSize",SqlDbType.Int,4)};
sp2[0] = 1;
sp2[1] = 3;
cmd.Parameter.AddRange(sp2);   //将“参数”对象加入到命令对象的参数集合中

con.Open();
SqlDataReader dr =cmd.ExecuteReader();
while(dr.Read())
{
  Console.WriteLine("id="+dr[0].ToString());
}

dr.Close();
con.CLose();

 

六、调用存储过程
多个参数的存储过程,且包含输出参数(output)

string conStr=@"server=;database=;Integrated Security=True";
SqlConnection con=new SqlConnection(conStr);

SqlCommand cmd = new SqlCommand("存储过程名称",con);
cmd.CommandType=CommandType.StoredProcedure;    //指定“命令类型”为存储过程
//多个参数
SqlParameter[] sp2 ={
                      new SqlParameter("@pageIndex",SqlDbType.Int),
                      new SqlParameter("@pageSize",SqlDbType.Int),
                      new SqlParameter("@pageCount",SqlDbType.Int),
                      new SqlParameter("@rowCount",SqlDbType.Int)
                    };
sp2[0] = 1;
sp2[1] = 3;
sp2[2].Direction = PamameterDirection.Output; //设置参数的输出方向
sp2[3].Direction = PamameterDirection.Output; //设置参数的输出方向
cmd.Parameter.AddRange(sp2);   //将“参数”对象加入到命令对象的参数集合中

SqlDataAdapter da =new SqlDataAdapter(cmd);
DataTable dt =new DataTable();
da.Fill(dt);

foreach(DataRow dr in dt.Rows)
{
  Console.WriteLine(dr[0].ToString()+"_"+dr[1].ToString() + "_"+dr[2].ToString());
}

int pageCount=Convert.ToInt32(cmd.Parameters[2].Value);
int rowCount=Convert.ToInt32(cmd.Parameters[3].Value);
Console.WriteLine("pageCount="+pageCount+",rowCount="+rowCount);

 

 

 

 

存储过程

通过row_number进行分页操作
create proc usp_GetPagedBooks
@pageIndex int=1
as

select * from
(
select
row_number() over (order by C_ID) as 分页字段,*
form
Category) as a
where
a.分页字段 > (@pageIndex-1)*5 and a.分页字段 <= @pageIndex*5

 


触发器

create trigger testForDel on Category
for delete
as
begin
select * from book
end

解释:对Category进行删除操作则会激活as后Sql语句

---创建一个带事务回滚的触发器
create trigger testForInsert on Category
for insert
as
begin
select * from book
begin transaction
rollback transaction
end

 

你可能感兴趣的:(sql,C#)