【黑马程序员】6. ADO.NET

来源:互联网 发布:淘宝差评申诉成功几率 编辑:程序博客网 时间:2024/05/19 20:41

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

一、     ADO.NET基础

  在.net框架下程序和数据库之间进行交互操作,使用的技术叫ADO.NET。通过ADO.NET就能在程序中执行SQL语句了,ADO.NET提供了对各种数据库的统一操作接口。

  直接在项目中添加.mdf文件的方式使用数据库的步骤:右击项目名è添加è新建项è数据库è基于服务的数据库。双击.mdf文件会在“服务器资源管理器”中打开.mdf文件,操作方式和在Management Studio中没有什么本质不同。要拷贝.mdf文件需要关闭所有指向.mdf文件的链接。和在数据库服务器上创建数据库没什么区别,运行的时候会自动附加(Attach)到SQL Server上。

二、     ADO.NET五大对象

  SqlConnection:用于创建程序到数据库的连接,一个SqlConnection对象代表一个到数据库的连接。要连接到哪个数据库,需要使用哪种身份认证信息等,这些信息就组成了“连接字符串”。SqlConnection有两非常重要的方法:Open():打开程序到数据库的连接,Close()关闭连接,注意连接Close之后可以再次调用Open()方法打开。

  SqlCommand:负责发送命令(SQL语句)给数据库并得到执行结果的。它有一个重要的属性:CommandText,要发送的SQL语句。ExecuteNonQuery()方法发送的是更新、删除、增加的命令,而用此方法发送查询命令的时候数据库并不执行ExecuteReader()方法专门用来发送查询命令。

  SqlDataReader:对于这个类,官方给出的解释是:提供一种从Sql Server数据库读取行的只进流的方式。对这个解释多少有些不理解。它有一个非常重要的方法:Read()方法,官方解释是:使SqlDataReader前进到下一条记录。SqlDataReader可以对返回的数据进行操作,但只是只读的,而且必须要保持与数据库的连接才行.

  SqlDataAdapter:官方的解释是:表示用于填充DataSet和更新SQL Server数据库的一组命令和一个数据库连接。它可以把数据库里的数据读出来,然后把这些数据一次性就装到DataSet中,而且还可以把DataSet中的数据一次性更新到数据库里。之所以它能做到这些,因为它有个重要的方法叫SqlDataAdater.Fill(),调用这个方法就可以把数据填充到DataSet中。

  DataSet:官方的解释叫做:表示数据在内存中的缓存。dataset其实相当于一个小型的离线的数据库,只不过是在内存中的。dataset有两大部分组成表与关系.表就是datatable关系就是Relation

三、     连接SQL Server

  ADO.Net中的连接类都实现了IDisposable接口,可能使用using进行资源的释放。

示例代码:

//定义连接字符串stringstrConn=@"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";    using (SqlConnection conn = new SqlConnection(strConn)) //new一个连接的对象
        {           conn.Open();//打开数据库连接                   MessageBox.Show("连接成功!");}

注意:using可以确保在其using内部时连接始终是打开的,出了using这个范围以后自动调用Dispose方法来释放连接所占用的所有资源。
四、执行简单的数据插入

//定义连接字符串stringstrConn=@"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";using (SqlConnection conn = new SqlConnection(strConn)) //new一个连接的对象
{       conn.Open();//打开数据库连接                  //简单的插入数据         string sqlCmd = @"Insert into Employees(employeeid,firstname,city,country)values(003,'李四','北京','中国')";       //使用指定的连接new一个发送命令的SqlCommand对象         using (SqlCommand cmd = new SqlCommand(sqlCmd, conn))       {                               int i = cmd.ExecuteNonQuery();//将Sql语句发送给数据库并由数据库执行插入              MessageBox.Show(i + "条数据插入成功!");       }}


五、执行简单的查询

//定义连接字符串stringstrConn=@"DataSource=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";using (SqlConnection conn=newSqlConnection(strConn)) //new一个连接的对象            
{       conn.Open();//打开数据库连接         MessageBox.Show("连接成功!");       //简单的查询数据         string sqlCmd="select employeeid,firstname,city,country from Employees";       //使用指定的连接new一个发送命令的SqlCommand对象         using (SqlCommand cmd=newSqlCommand(sqlCmd, conn))         {                             //创建一个SqlDataReader对象用来接收cmd.ExecuteReader()的执行结果                   SqlDataReader reader=cmd.ExecuteReader();  //通过reader.Read()方法来逐行向下读取SqlDataReader中的数据                   while(reader.Read())               {                   //获取指定列32位有符号整数的值                        int id=reader.GetInt32(reader.GetOrdinal("employeeid"));                   //获取指定列的字符串形式的值                        string name=reader.GetString(reader.GetOrdinal("firstname"));                   string city=reader.GetString(reader.GetOrdinal("city"));                   MessageBox.Show("employeeid="+id+",firstname="+name+",city="+city);               }         }  }


六、     SqlDataAdapterDataSet
的使用

  SqlDataAdapter,可以把数据库里的数据读出来,然后把这些数据一下就装到了dataset.而且还可以把dataset里的数据一下又装到数据库里(或更新到数据里)。它有个重要的方法叫:SqlDataAdater.Fill(...).调用这个方法的时候就可以把数据填充到dataset里的SqlDataAdapter能自动打开到数据库的连接。

SqlDataAdater怎么从数据库里得到数据呢?看下面一段代码:

//定义连接字符串string strConn = @"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf; Integrated Security=True;User Instance=True";string sqlcmd = "select employeeid,firstname,city,country from Employees";using (SqlConnection conn = new SqlConnection()){      DataSet ds = new DataSet();      //用指定的sql语句和连接来new一个SqlDataAdapter 对象      SqlDataAdapter sda = new SqlDataAdapter(sqlcmd,conn);      //开始发送命令(SqlCommand)给数据库,把返回的数据填充到dataset里的表名叫table1的表里      sda.Fill(ds, "table1");      //上面已经把ds里的table1填充上数据了,所以可以绑定到table1      GridView1.DataSource = ds.Tables["table1"].DefaultView;      GridView1.DataBind();}


注:

上述代码中没有调用cn.open()方法,是因为SqlDataAdapter能自动打开到数据库的连接。

sda.Fill(ds, "table1")中参数的意思是把数据填充到dstable1里。

sda.Fill(ds, "table1")方法还需要完成的事有:

1、打开到数据库的连接;

2、发送SqlCommand到数据库;

3、 把数据库返回的数据填充到DataSet中,还指定了往DataSet的哪个表中放数据,如果没有指定的表就自动创建一个名叫table1的表;

4、关闭数据库连接。

 

七、     映射

//定义连接字符串string strConn=@"Data Source=.\SQLEXPRESS; AttachDBFilename=|DataDirectory|\Database1.mdf; Integrated Security=True;User Instance=True";string sqlcmd = "select employeeid,firstname,city,country from Employees";using (SqlConnection conn = new SqlConnection()){      DataSet ds =  DataSet();      //用指定的sql语句和连接来new一个SqlDataAdapter 对象                             //添加一个映射,源表名为:employees,dataset里表名称为:table1       SqlDataAdapter sda = new SqlDataAdapter(sqlcmd,conn);     sda.TableMappings.Add("Employees", "table1");      //字段名称的对应关系       da.TableMappings[0].ColumnMappings.Add("employeeid",          "id号");      da.TableMappings[0].ColumnMappings.Add("firstname", "姓名");      da.TableMappings[0].ColumnMappings.Add("city", "城市");      da.TableMappings[0].ColumnMappings.Add("country", "国家");      //如果添加了映射,那么sda.Fill(ds,源表名)方法的第二个参数必须和            //sda.TableMappings.Add("Employees", "table1")第一个参数相同sda.Fill(ds, "Employees");GridView1.DataSource = ds.Tables["table1"].DefaultView;GridView1.DataBind();}

 

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

原创粉丝点击