Asp.net数据库SQL数据库操作学习笔记


1.注意:在使用SqlConnection类时,需要使用命名空间using System.Data.SqlClient;

  而连接Access数据库时,需要使用命名空间using System.Data.OleDb。
2.在SQL数据库的连接中,需要使用.NET提供的SqlConnection对象来对数据库进行连接。
在连接数据库前,需要为连接设置连接串,连接串就相当于告诉应用程序怎样找到数据
库去进行连接,然后程序才能正确的与SQL建立连接,连接字串示例代码如下所示:
 server='服务器地址';database='数据库名称';uid='数据库用户名';pwd='数据库密码';

上述代码说明了数据库连接字串的基本格式,如果需要连接到本地的mytable数据库,则
编写相应的SQL连接字串进行数据库的连接,示例代码如下所示:
  string strcon; //声明连接字串
  strcon = "server='(local)';database='mytable';uid='sa';pwd='sa';";    
            //设置连接字串

上述代码声明了一个数据库连接字串,SqlConnection类将会通过此字串来进行数据库的连接。
其中,server是SQL服务器的地址,如果相对于应用程序而言数据库服务器是本地服务器,则
只需要配置为(loacal)即可,而如果是远程服务器,则需要填写具体的ip。另外,uid是数据
库登录时的用户名,pwd是数据库登录时使用的密码。在声明了数据库连接字串后,可以使用
SqlConnection类进行连接,示例代码如下所示:
            string strcon;                                                    //声明连接字串
            strcon = "server='(local)';database='mytable';uid='sa';pwd='sa';";                //编写连接字串
            SqlConnection con = new SqlConnection(strcon);                            //新建SQL连接
            try
            {
                con.Open();                                                    //打开SQL连接
                Label1.Text = "连接数据库成功";                                    //提示成功信息
            }
            catch
            {
                Label1.Text = "无法连接数据库";                                    //提示失败信息
            }
3.填充DataSet数据集
DataSet数据集表示来自一个或多个数据源数据的本地副本,是数据的集合,也可以看作是一个
虚拟的表。DataSet对象允许Web窗体半独立于数据源运行。DataSet能够提高程序性能,因为
DataSet从数据源中加载数据后,就会断开与数据源的连接,开发人员可以直接使用和处理这些
数据,当数据发生变化并要更新时,则可以使用DataAdapter重新连接并更新数据源。
DataAdapter可以进行数据集的填充,创建DataAdapter对象的代码如下所示。
            SqlDataAdapter da=new SqlDataAdapter("select * from news",con);            //创建适配器
上述代码创建了一个DataAdapter对象并初始化DataAdapter对象,DataAdapter对象的构造函数
允许传递两个参数初始化,第一个参数为SQL查询语句,第二个参数为数据库连接的
SqlConnection对象。初始化DataAdapter后,就需要将返回的数据的集合存放到数据集中,示
例代码如下所示。
            DataSet ds = new DataSet();                                        //创建数据集
            da.Fill(ds, "tablename");                                            //Fill方法填充
上述代码创建了一个DataSet对象并初始化DataSet对象,通过DataAdapter对象的Fill方法,
可以将返回的数据存放到数据集DataSet中。DataSet可以被看作是一个虚拟的表或表的集合,
这个表的名称在Fill方法中被命名为tablename。

显式DataSet
当返回的数据被存放到数据集中后,可以通过循环语句遍历和显示数据集中的信息。当需要显
示表中某一行字段的值时,可以通过DataSet对象获取相应行的某一列的值,示例代码如下所示。
            ds.Tables["tablename"].Rows[0]["title"].ToString();                            //获取数据集
上述代码从DataSet对象中的虚表tablename中的第0行中获取title列的值,当需要遍历DataSet
时,可以使用DataSet对象中的Count来获取行数,示例代码如下所示。
            for (int i = 0; i < ds.Tables["tablename"].Rows.Count; i++)                //遍历DataSet数据集
            {
                Response.Write(ds.Tables["tablename"].Rows[i]["title"].ToString()+"<br/>");
            }
DataSet不仅可以通过编程的方法来实现显示,也可以使用ASP.NET中提供的控件来绑定数据集并
显示。
ASP.NET中提供了常用的显示DataSet数据集的控件,包括Repeater、DataList、GridView等数据
绑定控件。将DataSet数据集绑定到DataList控件中可以方便的在控件中显示数据库中的数据并
实现分页操作,示例代码如下所示。
            DataList1.DataSource = ds;                                        //绑定数据集
            DataList1.DataMember = "tablename";
            DataList1.DataBind();                                            //绑定数据
上述代码就能够将数据集ds中的数据绑定到DataList控件中。DataList控件还能够实现分页、
自定义模板等操作,非常方便开发人员对数据开发。

4..使用System.Data.OleDb
在使用System.Data.OleDb时,只需要修改连接字串即可。在这里需要强调一点的是,Access
数据库是一种桌面级的数据库,同文件类型的数据库类似,所以连接Access数据库时,必须
指定数据库文件的路径,或者使用Server.MapPath来确定数据库文件的相对位置。示例代码
如下所示。
            string str = "provider=Microsoft.Jet.OLEDB.4.0 ;Data Source="
            + Server.MapPath("access.mdb") + "";                                //使用相对路径
            OleDbConnection con = new OleDbConnection(str);                    //构造连接对象
            try
            {
                con.Open();                                                //打开连接
                Label1.Text = "连接成功";                                    //提示连接成功
                con.Close();
            }
            catch(Exception ee)                                            //抛出异常
            {
                Label1.Text = "连接失败";
            }
Server.MapPath能够确定文件相对于当前目录的路径,如果不使用Server.MapPath,则需要
指定文件在计算机的路径,如“D:\服务器\文件夹\数据库路径”。但是这样会暴露数据库
的物理路径,让程序长期处于不安全的状态。

5.打开和关闭连接
无论是使用System.Data.SqlClient还是System.Data.OleDb创建数据库连接对象,都可以
使用Open方法来打开连接。同样,也可以使用Close方法来关闭连接,示例代码如下所示。
            SqlConnection con = new SqlConnection(str);                        //创建连接对象
            OleDbConnection con2 = new OleDbConnection(str2);                    //创建连接对象
            con.Open();                                                    //打开连接
            con.Close();                                                    //关闭连接
            con2.Open();                                                //打开连接
            con2.Close();                                                //关闭连接
注意:如果使用了连接池,虽然显式的关闭了连接对象,其实并不会真正的关闭与数据库
之间的连接,这样能够保证再次进行连接时的连接性能。

6.在创建了数据库连接后,就需要对数据集DataSet进行填充,在这里就需要使用DataAdapter
对象。在没有数据源时,DataSet对象对保存在Web窗体可访问的本地数据库是非常实用的,
这样降低了应用程序和数据库之间的通信次数。然而DataSet必须要与一个或多个数据源进行
交互,DataAdapter就提供DataSet对象和数据源之间的连接。
为了实现这种交互,微软提供了SqlDataAdapter类和OleDbDataAdapter类。SqlDataAdapter
类和OleDbDataAdapter类各自适用情况如下。
?    SqlDataAdapter:该类专用于SQL数据库,在SQL数据库中使用该类能够提高性能,
SqlDataAdapter与OleDbDataAdapter相比,无需适用OLEDB提供程序层,可直接在SQL Server
上使用。
?    OleDbDataAdapter:该类适用于由OLEDB数据提供程序公开的任何数据源,包括SQL
数据库和Access数据库。
若要使一个使用DataAdapter对象的DataSet要能够和一个数据源之间交换数据,则可以使用
DataAdapter属性来指定需要执行的操作,这个属性可以是一条SQL语句或者是存储过程,示例
代码如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";        //创建连接字串
            SqlConnection con = new SqlConnection(str);
            con.Open();                                                    //打开连接
            SqlDataAdapter da = new SqlDataAdapter("select * from news", con);        //DataAdapter对象
            con.Close();                                                    //关闭连接
上述代码创建了一个DataAdapter对象,DataSet对象可以使用该对象的Fill方法来填充数据集。

7.ExecuteScalar方法
Command的Execute方法提供了返回单个值的功能。在很多时候,开发人员需要获取刚刚插入的
数据的ID值,或者可能需要返回Count(*),Sum(Money)等聚合函数的结果,则可以使用
ExecuteScalar方法。示例代码如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //设置连接字串
            SqlConnection con = new SqlConnection(str);                    //创建连接
            con.Open();                                                //打开连接
            SqlCommand cmd = new SqlCommand("select count(*) from mynews", con);    //创建Command
            Label1.Text = cmd.ExecuteScalar().ToString();                    //使用ExecuteScalar执行
上述代码创建了一个连接,并创建了一个Command对象,使用了可用的构造函数来初始化对象。
当使用ExecuteScalar执行方法时,会返回单个值。ExecuteScalar方法同样可以执行SQL语句,
但是与ExecuteNonQuery方法不同的是,当语句不为SELECT时,则返回一个没有任何数据的
System.Data.SqlClient.SqlDataReader类型的集合。
ExecuteScalar方法执行SQL语句通常是用来执行具有返回值的功能的SQL语句,例如上面所说的
当插入一条新数据时,返回刚刚插入的数值的ID号。这种功能在自动增长类型的数据库设计中,
经常被使用到,示例代码如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //设置连接字串
            SqlConnection con = new SqlConnection(str);                    //创建连接
            con.Open();                                                //打开连接
            SqlCommand cmd = new SqlCommand("insert into mynews values ('this is a new title!')
            SELECT  @@IDENTITY  as  'bh'", con);                        //打开连接
            Label2.Text = cmd.ExecuteScalar().ToString();                    //获取返回的ID值
上述代码使用了“SELECT  @@IDENTITY  as”语法,“SELECT  @@IDENTITY”语法会自动获取刚
刚插入的自动增长类型的值,例如,当表中有100条数据时,插入一条数据后数据量就成101,
为了不需要再次查询就获得101这个值,则可以使用“SELECT  @@IDENTITY  as”语法。

8.使用ExecuteReader()操作数据库,通常情况下是使用ExecuteReader()进行数据库查询操作,
使用ExecuteReader()查询数据库能够提升查询效率,而如果需要进行数据库事务处理的话,
ExecuteReader()方法并不是理想的选择。

9.ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入、删除、更新等
  操作时,首选ExecuteNonQuery()。
  使用ExecuteNonQuery()操作数据库时,ExecuteNonQuery()并不返回DataReader对象,返回的是
  一个整型的值,代表执行某个SQL语句后,在数据库中影响的行数,对于更新、插入和删除的SQL
   句,ExecuteNonQuery()方法的返回值为该命令所影响的行数。对于“CREATE TABLE”和
  “DROP TABLE”语句,返回值为0,而对于所有其他类型的语句,返回值为-1。
   ExecuteNonQuery()操作数据时,可以不使用DataSet直接更改数据库中的数据,示例代码如下所示。
        protected void Button1_Click(object sender, EventArgs e)
        {
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //创建连接字串
            SqlConnection con = new SqlConnection(str);                    //创建连接对象
            con.Open();                                                //打开连接
            string strsql = "delete from mynews where id>4";                    //编写执行删除的SQL语句
            SqlCommand cmd = new SqlCommand(strsql, con);                //创建Command对象
            Label1.Text = "该操作影响了" + cmd.ExecuteNonQuery() + "行";        //返回影响行数
        }
  ExecuteNonQuery()操作主要进行数据库操作,包括更新、插入和删除等操作,并返回相应的行数。
在进行数据库事务处理时或不需要DataSet为数据库进行更新时,ExecuteNonQuery()方法是数据操作
的首选。因为ExecuteNonQuery()支持多种数据库语句的执行。
注意:有些项目中,通过判断ExecuteNonQuery()的返回值来判断SQL语句是否执行成功,这样是有
失偏颇的,因为当使用创建表的语句时,就算执行成功也会返回-1。

10.ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与
ExecuteNonQuery()并不相同,ExecuteScalar()方法的返回值的数据类型是Object类型。如果
执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,如果执
行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,
示例代码如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //创建连接字串
            SqlConnection con = new SqlConnection(str);                    //创建连接对象
            con.Open();                                                //打开连接
            string strsql = "select * from mynews order by id desc";
            SqlCommand cmd = new SqlCommand(strsql, con);
            Label1.Text = "查询出了Id为" + cmd.ExecuteScalar() \;            //使用ExecuteScalar查询
通常情况下ExecuteNonQuery()操作后返回的是一个值,而ExecuteScalar()操作后则会返回
一个对象,ExecuteScalar()经常使用于当需要返回单一值时的情况。例如当插入一条数据
信息时,常常需要马上知道刚才插入的值,则可以使用ExecuteScalar()方法。示例代码如下所示。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //创建连接字串
            SqlConnection con = new SqlConnection(str);                    //创建连接对象
            con.Open();                                                //打开连接
            string strsql = "insert into mynews values ('刚刚插入的id是多少?')
            SELECT  @@IDENTITY  as  'bh'";                            //插入语句
            SqlCommand cmd = new SqlCommand(strsql, con);                //执行语句
            Label1.Text = "刚刚插入的行的id是" + cmd.ExecuteScalar();        //返回赋值
上述代码使用了SELECT  @@IDENTITY语法获取刚刚执行更新后的id值,然后通过使用
ExecuteScalar()方法来获取刚刚更新后第一行第一列的值。

11.使用ExecuteXmlReader()操作数据库
ExecuteXmlReader()方法用于操作XML数据库,并返回一个XmlReader对象,若需
要使用ExecuteXmlReader()方法,则必须添加引用System.Xml。XmlReader类似
于DataReader,都需要通过Command对象的ExecuteXmlReader()方法来创建
XmlReader的对象并初始化,示例代码如下所示。
            XmlReader xdr = cmd.ExecuteXmlReader();                            //创建XmlReader对象
ExecuteXmlReader()返回XmlReader对象,XmlReader特性如下所示:
?    XMLReader是面向流的,它把XML文档看作是文本数据流。
?    XMLReader是一个抽象类。
?    XMLReader使用pull模式处理流。
?    三个派生类:XMLTextReader、XMLNodeReader和XMLValidatingReader
下面代码实现了获取当前节点中属性的个数。
            string str = "server='(local)';database='mytable';uid='sa';pwd='sa'";    //创建连接字串
            SqlConnection con = new SqlConnection(str);                    //创建连接对象
            con.Open();                                                //打开连接
            string strsql = "select * from mynews order by id desc FOR XML AUTO, XMLDATA";
            SqlCommand cmd = new SqlCommand(strsql, con);                //创建Command对象
            XmlReader xdr = cmd.ExecuteXmlReader();                        //创建XmlReader对象
            Response.Write(xdr.AttributeCount);                            //读取节点个数
上述代码使用了SQL语言中的FOR XML AUTO,、XMLDATA关键字,当执行ExecuteXmlReader()方
法时,会返回XmlReader对象,若不指定FOR XML AUTO,、XMLDATA关键字,则系统会抛出异常。













  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值