什么是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();//打开数据库
posted on 2017-03-07 18:05  NE_STOP  阅读(2)  评论(0编辑  收藏  举报  来源