什么是ado.net
使用.net技术操作数据库的一套类库。
命名空间
system.data:描述数据的命名空间
system.data.sqlclient:专门针对sqlserver的命名空间
四大类(不同数据库会有不同的前缀),四大模型
connection :用于连接数据库
command: 链接成功后用于操作数据库的命令
1。 ExecuteNonQuery模型
1-1.执行非查询语句,返回受影响行数,如果执行的是非增、删、改操作返回-1
int ExecuteNonQuery()
例: string con=“数据库连接信息”;
sqlconnection conn=new sqlconnection(con);
string sql=“sql语句”;
sqlcommand cmd=new sqlcommand(sql,conn);
conn.Open();
int count=cmd.ExecuteNonQuery();//返回受影响的行数
conn.Dispose();
cmd.Dispose();//释放资源
例子2: string coonStr=@"链接信息";
string sql="sql语句";
using(SqlCoonection conn=new SqlCoonection(coonStr))
{
using(SqlCommand cmd=new SqlCommand(sql,conn))
{
conn.Open();
int count=cmd.ExecutrNonQuery();
}
}
ExecuteScalar模型
2、ExecuteScalar模型:返回查询的第一行第一列的结果。返回类型是object,用法和上一个类型相同。
連接池
保存連接對象的池子。用於存放數據庫連接對象。當conn.close()時,在一定時間內(比如100ms)講連接信息保存在連接池中。當再次打開相同的數據庫時,直接用池子中的鏈接對象,大大提高了與數據庫交互的效率。
例子: string connStr='鏈接信息';
Stopwatch sp=new Stopwatch();
sp.Start()//計時開始
for(int i=0;i<1000;i++)
{
SqlConnection conn=new SqlConnection(connStr);
conn.Open();
conn.Close();//有此項操作才是使用了連接池
}
sp.Stop();//計時結束
Console.Write(sp.Elapsed);//打印出花費的時間
禁用連接池:在鏈接的數據庫字符串後面加上pooling=false;
string connStr='鏈接信息';pooling=false;
简单处理注入漏洞攻击
注入漏洞:原本是一个数据,现在变成一个数据和一个条件(可能是永远为true的条件)
解决办法:1、限制其只允许是数据
string pwd=pwd.Replace("\'","\'\'");//数据库sql语句里要表示一个单引号的字符串,常常用连续2个单引号来表示一个单引号字符串。(次办法常用于asp时代)
2、参数化查询
如何使用参数化查询
1.将原来需要字符串拼接的值,用一个@引导的变量名代替
2.使用SqlParameter类型将参数变量与值绑定在一起
3.将Sqlparameter对象交给cmd对象的Parameter集合
例子:string uid="uid";
string pwd="pwd";
string coonStr=ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;
string sql="select count(*) from 表名 where uid=@uid and pwd=@pwd;";
SqlParameter pUid=new SqlParameter("@uid",uid);
SqlParameter pPwd=new SqlParameter("@pwd",pwd);
int count;
using(SqlConnection conn=new Sqlconnection(coonStr))
{
using(SqlCommand cmd=new SqlCommand(sql,conn))
{
//将参数交给cmd、
cmd.Parameters.Add(pUid);
cmd.parameters.Add(pPwd);
conn.Open();
count=(int) cmd.ExecuteScalar();
}
}
ExecuteReader模型
执行数据库的查询操作时,返回查询结果,返回的数据类型是SqlDataReader类型
例子: string sql="sql语句";
string connStr="连接信息";
using(SqlConnection conn= new SqlConnection(connStr)){
using(SqlCommand cmd= new SqlCommand(sql,conn)){
conn.Open();
SqlDataReader reader=cmd.ExecuteReader();
using(reader){
while(reader.Read())//read表示索引跳到下一行
for(int i=0;i<reader.FieldCount;i++)
{
string data=reader[i].ToString();
Console.Write(data+",");
}
COnsole.WriteLine();
}
Console.ReadKey();
}
}
datareader:用于取数据
dataadapter:将数据库的数据转换成后台相对应的数据类型
例子; string coonStr="连接信息";
string sql ="sql语句";
DataSet ds=new DataSet();
using (SqlDataAdapter sda=new SqlDataAdapter(sql,coonStr))
{
sda.Fill(ds);//将数据写入ds中
}
连接数据库
1.数据库地址和实例名,数据库名,验证的凭证(用户名密码,本机数据库连接凭证)
server=ip或者机器名或.\实例名;database=数据库名;uid=sa;pwd=123;或integrated security=true;//集成安全验证(windows身份验证)
例:string connstr=“server=.;database=master;uid=sa;pwd=123”;
sqlconnection conn=new sqlconnection(connstr);//连接数据库
conn.Open();//打开数据库
本文来自博客园,作者:NE_STOP,转载请注明原文链接:https://www.cnblogs.com/alineverstop/p/18004732