ADO.NET数据库连接学习笔记

整理这个文件资料,已经花费我半个月的时间,在此我将我理解的东西以简单独到的见解以及用最简洁的话将之表达出来,虽然有些抽象。但是只要经常看,那么每看一次都会加深点印象。希望大家静下心来看,没有什么克服不了的困难!谢谢...

注意:希望大家在copy代码的时候注意命名空间的引用,因此需要加上以下语句:
using System.Data;
using System.Data.SqlClient;


SqlConnetion对象:主要是连接程序和数据源的“桥梁”,要存取数据源中的数据,首先要建立程序和数据源之间的连接。
1.混合模式
string connStr="server/Data Source=(local);uid=sa;pwd=;database/Initial Catalog=demo";
SqlConnection conn = new SqlConnection(connStr);
或连起来写:
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=;database=demo");
2.使用Windows验证方式:
string connetionString="server=(local);database=demo;trusted_connetion/Intergtated Secrity=true";
SqlConnection conn=new SqlConnection(connetionString);

SqlConnetion对象实例演示:
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">
    public void Page_Load(object sender,EventArgs e)
    {
        string connStr = "server=.;database=demo;uid=sa;pwd=xushouwei";
        //SqlConnection conn = new SqlConnection("server=.;database=demo;uid=sa;pwd=xushouwei");
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        Response.Write("连接成功!");
    }
</script>


Command对象:主要用来对数据发出一些指令,通过Command对象可以对数据库进行查询、增加、修改、删除以及调用数据库中的存储过程等操作。
建立Command对象的常用语法为:
SqlCommand cmd=new SqlCommand(cmdText(用于描述需要执行的操作),myConnection(用于指定所使用的连接对象));
或者这样写:
SqlCommand cmd=myConnection.CreateCommand();
cmd.CommandText=cmdText;

Command对象的ExecuteNonQuery方法向用户表中增加一条记录实例:
public void Page_Load(object sender,EventArgs e)
    {
        string connStr = "server=.;uid=sa;pwd=xushouwei;database=demo";
        //string connStr=System.Configuration.ConfigurationManager.AppSettings["DSN"];
        //创建Connection
        SqlConnection conn = new SqlConnection(connStr);
        //创建Command
        SqlCommand cmd = new SqlCommand("insert into Users(UserName,RealName)values('Jasxu','徐守威')",conn);
        //打开Connection
        conn.Open();
        //执行Command命令
        cmd.ExecuteNonQuery();
        //关闭Connection
        conn.Close();
    }
Command对象的ExecuteNonQuery方法向用户表中Update(更新/修改)一条记录实例:
public void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串connStr
        string connStr = "server=.;uid=sa;pwd=xushouwei;database=demo";
        //创建Connection
        SqlConnection conn = new SqlConnection(connStr);
        //创建Command
        SqlCommand cmd = new SqlCommand("update Users set RealName='徐守威' where UserID=1",conn);
        //打开Connection
        conn.Open();
        //执行Command命令
        cmd.ExecuteNonQuery();
        //关闭Connection
        conn.Close();
    }


Command对象的ExecuteNonQuery方法向用户表中Delete(删除)一条记录实例:
public void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串connStr
        string connStr = "server=.;uid=sa;pwd=xushouwei;database=demo";
        //创建Connection
        SqlConnection conn = new SqlConnection(connStr);
        //创建Command
        SqlCommand cmd = new SqlCommand("delete from Users where UserID=1",conn);
        //打开Connection
        conn.Open();
        //执行Command命令
        cmd.ExecuteNonQuery();
        //关闭Connection
        conn.Close();
    }

执行带参数的Command实例演示:
方法一:
protected void Button1_Click(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=.;uid=sa;pwd=xushouwei;database=demo";
        //创建Connection
        SqlConnection conn = new SqlConnection(connStr);
        //创建Command,SQL语句中有一个参数@UserName
        SqlCommand cmd = new SqlCommand("select * from Users where RealName=@UserName",conn);
        //把@UserName参数加入到Parameters,并给参数赋值
        cmd.Parameters.Add("@UserName",SqlDbType.VarChar).Value=TextBox1.Text;
        //打开连接
        conn.Open();
        //从数据库取回数据到DataReader
        SqlDataReader reader = cmd.ExecuteReader();
        //把SqlDataReader绑定到GridView控件
        dg.DataSource = reader;
        //在GridView中显示绑定数据
        dg.DataBind();
        //关闭DataReader
        reader.Close();
        //关闭连接
        conn.Close();
    }
方法二:
protected void Button1_Click(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=NIIT038;uid=sa;pwd=xushouwei;database=example";
        //建立connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //根据用户的输入动态创建sql
        string sql = "select * from Users where RealName='" + TextBox1.Text.Trim() + "'";
        //创建command,其sql由用户输入而定
        SqlCommand cmd = new SqlCommand(sql,conn);
        //打开连接
        conn.Open();
        //从数据库取回到DataReader
        SqlDataReader reader = cmd.ExecuteReader();
        //把DataReader绑定到Gridview
        dg.DataSource = reader;
        //在Gridview中显示数据绑定
        dg.DataBind();
        //关闭DataReader
        reader.Close();
        //关闭连接
        conn.Close();
    }

Command对象的ExecuteScalar方法:返回执行结果中首行首列的值,该方法只能执行select语句,一般用于取得最大值、最小值、平均值、记录数。
实例演示如下:
protected void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=NIIT038;uid=sa;pwd=xushouwei;database=example";
        //建立connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //打开连接
        conn.Open();
        //创建command
        SqlCommand cmd = new SqlCommand("select count(*)from Users",conn);
        //执行ExecuteScalar方法并把返回值赋给count
        int count=(int)cmd.ExecuteScalar();
        Response.Write("User表中共有"+count+"个用户!");
    }


DataReader对象:当只需要顺序第读取数据而不需要其他操作时,可以使用DataReader对象,由于DataReader在读取数据的时候限制了每次以只读的方式读取一条记录,并不允许其他的操作,所以使用DataReader不但可以节省资源而且效率很高。DataReader类是抽象类,因此不能直接实例化而是通过执行Command对象的ExecuteReader方法返回DataReader实例。
实例演示如下:
 protected void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=NIIT038;uid=sa;pwd=xushouwei;database=example";
        //建立connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //打开连接
        conn.Open();
        //创建command
        SqlCommand cmd = new SqlCommand("select * from BookShop",conn);
        //从数据库取回到DataReader
        SqlDataReader reader = cmd.ExecuteReader();
        //显示SqlDataReader对象中的所有数据
        while (reader.Read())
        {
            Response.Write(reader["BookName"] + "&nbsp;&nbsp;");
            Response.Write(reader["BookDescription"] + "<BR>");
        }
        //关闭DataReader
        reader.Close();
        //关闭连接
        conn.Close();
    }

 

DataSet对象:DataSet对象可以视为一个内存数据库,是由许多数据表(Data Table)、数据表联系(Relation)、约束(Constraint)记录(Data Row)以及字段(Data Column)对象的集合所组成。DataSet对象的结构也与数据库相似,DataSet对象由一个或多个DataTable组成,DataTable相当于数据库中的表,有列DataColumn与行DataRow,分别对应于数据库的字段与记录。DataSet对象中的数据存放在DataTable中。DataSet对象一个重要的特征是<离线操作>(重要),即从数据库中取回数据,存到DataSet对象中后,程序可以马上断开与数据库的连接,用户可以对内存中的DataSet中的数据进行增加、删除、修改等操作,而当需要把改动反映到数据库时,只要重新与数据库建立连接,并利用相应的命令实现更新。
实例演示如下:
protected void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=NIIT038;uid=sa;pwd=xushouwei;database=example";
        //建立connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //创建SqlDataAdapter对象(以后会有详解)
        SqlDataAdapter da = new SqlDataAdapter("select * from Users",conn);
        //创建DataSet对象
        DataSet ds = new DataSet();
        //使用SqlDataAdapter的Fill方法填充DataSet
        da.Fill(ds, "Users");
        //实现数据绑定
        dg.DataSource = ds.Tables[0];//等同于--》dg.DataSource = ds.Tables["Users"]或者dg.DataSource = ds.Tables["Users"].DefaultView或者dg.DataSource = ds
        dg.DataBind();
    }


DataTable对象:DataTable对象是构成DataSet最主要的对象,DataTable对象是由DataColumns集合以及DataRow集合组成,DataSet的数据就存放在DataTable对象中。
实例演示如下:
protected void Page_Load(object sender, EventArgs e)
    {
        //去BookShop表的前三条记录到DataReader中
        //创建连接字符串
        string connStr = "server=NIIT038;uid=sa;pwd=xushouwei;database=example";
        //建立connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //打开连接
        conn.Open();
        //创建command
        SqlCommand cmd = new SqlCommand("select top 3 BookName,BookDescription from BookShop",conn);
        //从数据库取回到DataReader
        SqlDataReader reader = cmd.ExecuteReader();
        //创建内存表DataTable
        DataTable table = new DataTable("BookDetails");
        //增加Index列
        table.Columns.Add("Index");
        //增加BookName列
        table.Columns.Add("BookName");
        //增加Description列
        table.Columns.Add("BookDescription");
        //DataReader中的数据赋给内存表DataTable
        int index = 1;
        while(reader.Read())
        {
            //动态创建表行数
            DataRow row = table.NewRow();
            row["Index"] = index.ToString();
            row["BookName"] =reader["BookName"].ToString();
            row["BookDescription"] = reader["BookDescription"].ToString();
            table.Rows.Add(row);
            index = index + 1;
        }
        //关闭DataReader
        reader.Close();
        //关闭连接
        conn.Close();
        //在GridView中绑定显示内存表DataTable的数据
        dg.DataSource = table;
        //实现绑定
        dg.DataBind();
    }


DataAdapter对象:由于DataSet对象本身不具备和数据库沟通的能力,要修改数据并更新回数据源,需要DataAdapter对象。DataAdapter对象提供的是对数据集的填充和更新的回传任务,对于DataSet来说,DataAdapter对象有点像一个搬运工:它把数据从数据库“搬运”到DataSet中,DataSet中的数据有个改动的时候,又可以把这些改动“反映”给数据库。而DataAdapter对象做这件事情,靠的是它所包含的4个Command对象:1.SelectCommand:用于在数据源中选择记录的SQL命令 2.InsertCommand:用来在数据源中插入新记录的SQL命令 3.UpdateCommand:用于更新数据源中的记录的SQL命令 4.DeleteComand:用来从数据集删除记录的SQL命令.
创建DataAdapter对象一般用以下方式:
SqlDataAdapter da=new SqlDataAdapter (selectSQL,Connection);
其中,selectSQL为返回数据集的Select语句,Connection用于制定所用的连接。这种方式等价于另一种常用的DataAdapter对象创建方式:
SqlDataAdapter da=new SqlDataAdapter ();//创建DataAdapter对象
SqlCommand cmd=new SqlCommand(selectSQL,conn);//创建Command对象
da.SelectCommand=cmd;//给DataAdapter的SelectCommand赋值
实例演示如下:
protected void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=2012-20130315AP;uid=sa;pwd=xushouwei;database=student";
        //建立Connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //创建SqlDataAdapter对象
        SqlDataAdapter da = new SqlDataAdapter("select stuId,stuName,Email from students", conn);
        //创建DataSet对象
        DataSet ds = new DataSet();
        //使用SqlDataAdapter的Fill方法填充DataSet
        da.Fill(ds, "students");
        //实现数据绑定
        oldGV.DataSource = ds;
        oldGV.DataBind();
        //插入心的一行
        DataRow dr1 = ds.Tables["students"].NewRow();
        dr1["stuName"] = "suxuan";
        dr1["Email"] = "123456@163.com";
        ds.Tables["students"].Rows.Add(dr1);
        //更新第二行
        DataRow dr2 = ds.Tables["students"].Rows[1];
        dr2["stuName"] = "hufeng";
        //删除第一行
        ds.Tables["students"].Rows[0].Delete();
        //利用SqlCommandBuilder对象自动构建
        SqlCommandBuilder cb = new SqlCommandBuilder(da);
        da.Update(ds, "students");
        //实现数据绑定
        newGV.DataSource = ds;
        newGV.DataBind();
    }

利用SqlCommandBuilder对象生成的几个Command的SQL命令实例演示:
protected void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=2012-20130315AP;uid=sa;pwd=xushouwei;database=student";
        //建立Connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //创建SqlDataAdapter对象
        SqlDataAdapter da = new SqlDataAdapter("select stuId,stuName,QQ,Email from students",conn);
        //利用SqlCommandBuilder对象自动构建
        SqlCommandBuilder cb = new SqlCommandBuilder(da);
        Response.Write("DeleteCommand的SQL:<br>");
        Response.Write(cb.GetDeleteCommand().CommandText);
        Response.Write("<br>UpdateCommand的SQL:<br>");
        Response.Write(cb.GetUpdateCommand().CommandText);
        Response.Write("<br>InsertCommand的SQL:<br>");
        Response.Write(cb.GetInsertCommand().CommandText);
    }

 

DataView对象:DataView对象可以自定义数据外观,它是一种用来帮助用户设置DataTable中的数据要如何显示出来的对象,它本身不包含DataTable对象中的数据。通过DataView对象可以来过滤、排序、查找对应DataTable中的数据。对DataView对象所执行的任何操作都会影响原来的DataTable对象中的数据。DataTable对象提供一个DefaultView属性,DefaultView属性本身就是DataView对象,可以设置DefaultView的属性来指定DataTable对象的显示格式。如果DefaultView这个DataView对象无法满足需求,还可以简历多个DataView对象来制定数据的显示格式。语法声明如下:
DataView dataview=new DataView(数据表);
排序:DataView.Sort="字段ASC(升序)|DESC(降序)";
筛选:DataView.RowFilter="过滤条件";

DataView对象实例演示如下:
protected void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=2012-20130315AP;uid=sa;pwd=xushouwei;database=student";
        //建立Connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //创建SqlDataAdapter对象
        SqlDataAdapter da = new SqlDataAdapter("select * from students",conn);
        //创建DataSet对象
        DataSet ds = new DataSet();
        //使用SqlDataAdapter的Fill方法填充DataSet
        da.Fill(ds, "students");
        //创建DataView对象
        DataView dv = new DataView(ds.Tables["students"]);
        //筛选
        dv.RowFilter = "stuId<5";
        //排序(降序)
        dv.Sort = "QQ DESC";
        Response.Write("满足条件的记录有:"+dv.Count+"条!");
        //实现数据绑定
        dg.DataSource=dv;
        dg.DataBind();
    }


使用存储过程(Stored Procedure):是有一些列SQL语句和控制语句组成的数据处理过程,它存放在数据库中,在服务器段运行。
1)执行不带参数的存储过程:
ADO.NET中执行存储过程,与执行一般的SQL命令相似,不同之处有亮点:
1.创建Command时候,命令语句CommandText为存储过程名
2.CommandType属性设置为CommandType.StoredProcedure,表示要执行存储过程。
实例演示如下:
首先在查询分析其中运行如下的SQL语句,创建存储过程P_1,P_1的功能是返回students表中的前三条记录。:
use student
go
create procedure p_1
as
select top 3 stuId,stuName,Email from students

protected void Page_Load(object sender, EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=2012-20130315AP;uid=sa;pwd=xushouwei;database=student";
        //建立Connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //打开连接
        conn.Open();
        //创建SqlDataAdapter对象
        SqlDataAdapter da = new SqlDataAdapter();
        //创建command
        SqlCommand cmd = new SqlCommand("p_1",conn);
        cmd.CommandType = CommandType.StoredProcedure;
        da.SelectCommand = cmd;
        //创建DataSet对象
        DataSet ds = new DataSet();
        //使用SqlDataAdapter的Fill方法填充DataSet
        da.Fill(ds,"students");
        //实现数据绑定
        dg.DataSource=ds;
        dg.DataBind();
    }

 

2)执行带参数的存储过程:
实例演示如下:
首先在查询分析其中运行如下的SQL语句,创建存储过程P_2。:
use student
create procedure p_2
@stuId int,--学生的编号
@stuName varchar(150) output--学生的姓名
As
select @stuName=stuName from  students where stuId=@stuId
if @@RowCount>0
return 1--找到学生
else
return 0--未找到学生
GO


protected void Page_Load(object sender,EventArgs e)
    {
        //创建连接字符串
        string connStr = "server=2012-20130315AP;uid=sa;pwd=xushouwei;database=student";
        //建立Connection连接
        SqlConnection conn = new SqlConnection(connStr);
        //创建command
        SqlCommand cmd = new SqlCommand("p_2", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        //输入参数的用法
        //创建SqlParameter类型参数,注意参数名@sutId要与存储过程中的参数名一致
        SqlParameter paramid = new SqlParameter("@stuId",SqlDbType.NVarChar,50);
        //给参数赋值
        paramid.Value = "5";//查找学号为5的学生
        //把参数加入到Command的Parameter集合
        cmd.Parameters.Add(paramid);
        //输出参数的方法
        SqlParameter paramstuName = new SqlParameter("@stuName",SqlDbType.NVarChar,150);
        //指出该参数是存储过程的output参数
        paramstuName.Direction = ParameterDirection.Output;
        //把参数加入到Command的Parameter集合
        cmd.Parameters.Add(paramstuName);
        //返回值的获取
        SqlParameter paramreturn = new SqlParameter("@return",SqlDbType.Int,150);
        //指出该参数是存储过程的返回参数
        paramreturn.Direction = ParameterDirection.ReturnValue;
        //把参数加入到Command的Parameter集合
        cmd.Parameters.Add(paramreturn);
        //打开连接
        conn.Open();
        cmd.ExecuteNonQuery();
        //断开连接
        conn.Close();
        //判断是否找到该学生
        if(paramreturn.Value.ToString()=="1")
        {
            Response.Write("学生姓名为:"+paramstuName.Value.ToString()+"<br>");
        }
        else
        {
            Response.Write("没有找到学生学号为5的学生!");
        }
    }

 

 

 

 


 

posted @ 2013-05-10 20:55  徐守威  阅读(531)  评论(0编辑  收藏  举报