C#数据库

xiaoxiao2021-02-27  183

1. >配置文件 ->首先在 app.Config文件中添加 节点,如下: <connectionStrings> <add name="sql2" connectionString="server=.;uid=sa;pwd=123456;database=demo"/> </connectionStrings> ->在项目中添加System.Configuration程序集引用(控制台和WinFrm才需要) ->在项目中使用ConfigurationManager获取链接字符串。

例如:ConfigurationManager.ConnectionStrings["配置的节点的Name名字"].ConnectionString

using(SqlConnrction conn = new sqlConnnection(constr)) {Sqlcommand cmd = conn.createComendText() }

->ExcuteNonQuery() 执行非查询类的sql脚本,返回影响的行数->ExcuteScalar() 执行sql,返回第一行第一列的值->ExcuteReader() 返回SqlDataReader->Reader默认指向 数据行->Read()方法执行一次,指针向下走一次。

using(对象 自动关闭){

  }

->SQL注入漏洞->一般在登录的场景下:使用一些特殊的字符进行对数据库进行攻击。->  '  or 2=2  --->Sql参数化:SqlParameter->DataSet和DataTable

2.SqlDataAdapter数据访问适配器。

string constr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; using (SqlConnection conn = new SqlConnection(constr)) { string strsql = @"SELECT uuid, userName, pwd, name, gender FROM tbl_emp"; using (SqlDataAdapter adapter = new SqlDataAdapter(strsql,conn)) { //adapter :一个链接,cmd.commandText(sql) DataTable dt = new DataTable(); adapter.Fill(dt);//把数据库中数据填充到数据表中 this.dgv.DataSource = dt; } }

3.分页

(1)select  top 每页数* from 表1 where ID not in(select top((第几页-1)*每页数)) from 表1 order by id)order by id;

(2)select * from (select *,ROW_NUMBER() over(order by userid) as num from 表)as T where T.num between ((第几页-1)*每页数)and (第几页*每页数);

sql

--01:sql:游标。 --创建一个游标,然后遍历UserInfo表中的所有数据,打印 用户id和用户名。 --select  * from UserInfo ----定义游标,让游标指向sql查询的结果。 --declare demoCursor Cursor for -- select UserName,UserId,UserAge from UserInfo ----打开游标。 --open demoCursor -- declare @UserName nvarchar(32) -- declare @UserAge int -- declare @UserId int -- --把游标指向的数据取出来, 把数据放到 后面的三个变量中。 -- fetch next from demoCursor into @UserName,@UserId,@UserAge -- while(@@FETCH_STATUS= 0)--@@FETCH_STATUS=0的时候表示,取数据成功。 -- begin -- print @UserName -- print @UserAge -- print @UserId -- update UserInfo set UserName=@UserName+'kk' where UserId=@UserId--给当前行的Name列加了后缀。 -- print '------------' -- fetch next from demoCursor into @UserName,@UserId,@UserAge -- end --close demoCursor --关闭游标 --deallocate demoCursor--释放游标,释放后就不能再open --02:视图 --创建视图:视图中就是放 年龄大于40的用户信息 --create View VW_UserInfo as -- select * from UserInfo where UserAge>40 --视图的使用 --select * from VW_UserInfo  --视图就可以直接用于select 查询,当做一张表来用。 --03:临时表 --临时表  在表名前面 加了  #,临时表  和普通的表: ----会话结束的时候,那么临时表就结束了。 --create table #TestTb --( -- Id  int identity(1,1) primary key not null, -- Name nvarchar(32) null --) ----临时表的使用跟普通的表一样。 --select * from #TestTb ----临时表用完之后一定要: 释放掉临时表 --drop table #TestTb --常用的临时表的用法 --select * into #Tb from  Userinfo --select * from #Tb --drop table #Tb --临时表可以用于 高并发的情况的优化 --join  --只要做表的连接;那么肯定就会  做两个表的笛卡尔积。 --一个查询中关联了7-8张表。 --表的数据非常多,另外表数据crud操作又非常频繁。 --数据库:锁概念。 --  锁的级别在表级别。 --  X:排它锁    S:共享锁 --  insert、update、delete 会在表上加   X --  select   在表上添加  S锁。   --多表连接 --假设:员工表:10000000000000   部门:10亿条 --使用临时表。 --select *  from Employee as E --left join Position as P on E.PositionId = p.PositionId ----优化的原则:就是尽早的释放锁。 --select * into #Emp  from Employee  --select * into #Pos from Position ---- --select * from #Emp as E --left join #Pos as P on P.PositionId=E.PositionId --drop table #Emp --drop table #Pos --全局的临时表:所有的用户的会话都可以访问到。 --全局临时表会在所有用户都断开会话后,会自动释放。 --select * into ##Pos from Position--尽量不要全局的。 --drop table  ##Pos --04: try catch:sql的异常处理 --begin try -- sql... --end try --begin catch -- ... --end catch --05: 事务。Sql使用事务 --select * from UserInfo --begin try -- begin transaction--开启事务 -- update UserInfo set UserName=N'你好' where UserId=2 -- update UserInfo set UserAge=N'数量的解放路' where UserId=3 -- commit transaction--提交事务:上面执行结果执行到数据库里面去。 --end try --begin catch -- rollback transaction--回滚事务 --end catch -- update UserInfo set UserName=N'sssss' where UserId=2 --06: 存储过程 --存储过程其实就是没有返回值的 一段sql代码。 if(exists(select * from sys.all_objects where name='Pro_UserInfo_GetUserInfo')) drop proc Pro_UserInfo_GetUserInfo go --定义存储过程 --create proc Pro_UserInfo_GetUserInfo  --@UserAge int,   --输入参数 --@Num int output--输出参数 --as -- select * from UserInfo  where UserAge>@UserAge -- --在存储过程执行结束前必须给输出参数赋值。 -- select @Num=Count(*) from UserInfo-- -- print @Num --go ----调用存储过程 --declare @Num int --exec Pro_UserInfo_GetUserInfo 100,@Num out --print @Num--执行完存储过程打印 --分页存储过程 --一页有两条,  --if(exists(select * from sys.all_objects where name='Pro_UserInfo_GetPageUserInfos')) -- drop proc Pro_UserInfo_GetPageUserInfos --go --create proc Pro_UserInfo_GetPageUserInfos --@PageSize int, --@pageIndex int, --@TotalCount int  output --as --select * from ( -- select *,ROW_NUMBER() over(Order by UserId asc) as RowNum from UserInfo --) as T --where T.RowNum between ((@PageIndex-1)*@PageSize+1)  and (@PageSize*@PageIndex) ---- --select @TotalCount=count(1) from UserInfo ----调用分页存储过程 --declare @Total int ----select * from userInfo --exec Pro_UserInfo_GetPageUserInfos 2,4,@Total out --print @Total --select * from UserInfo --系统存储过程 --exec sp_databases --exec sp_tables --exec sp_columns 'UserInfo' --exec sp_databases --select * from sys.all_objects  --declare @strSql nvarchar(max) --set @strSql='select * from userinfo' --把字符串当成一个sql脚本执行 --exec (@strSql) --exec ('select * from UserInfo') --exec sp_executesql @strSql  --兼容性更强 --select getdate() --select avg() ---自定义函数 --:把年龄大于传过来的参数的 数据的条数返回。 --create function FUN_GetUser(@UserAge int) --returns int --as --begin -- declare @result int -- set @result=(select count(1) from UserInfo where UserAge>@UserAge) -- return @result --end --select count(1) from UserInfo where UserAge>40 --select dbo.FUN_GetUser(40) --表 值函数。 --create function FUN_UserInfo_GetUserInfo2(@UserAge int) --returns table --as -- return ( select * from UserInfo where UserAge>@UserAge) --select * from FUN_UserInfo_GetUserInfo(40) --select * from Pro_UserInfo_GetUserInfo --create table DemoLastDAy --( -- Id int identity(1,1) primary key not null, -- Name nvarchar(32) null --) select * from DemoLastDAy --insert into DemoLastDAy(Name) output inserted.Id values('sss222') --cmd.ExucuteNonquery() --cmd.ExucuteScalar(); insert into DemoLastDAy(Name) values('sfdsfdsljlsj') //当DemoLastDAy发生了插入操作后,会触发下面这个触发器的执行。 create trigger TR_DemoLastDAy_Insert on  DemoLastDAy for insert as begin declare @Id int select @Id=Id from inserted-- 它是一张表。 update DemoLastDAy set Name=Name+cast(getdate() as nvarchar(32)) where Id=@Id end 

转载请注明原文地址: https://www.6miu.com/read-14271.html

最新回复(0)