黑马程序员 c#学习9

Windows Phone 7手机开发.Net培训、期待与您交流! ADO.NET基础
     
      ADO.NET是net framework提供的一堆用于向数据库提交sql语句的的类


      sql server 的两种连接方式


      windows 验证:这是一种受信连接 , 一般用于本机连接或者受信的局域网连接


      sqlserver身份验证: 使用用户名和密码的方式来验证  sa用户,sqlserver的最高权限用户。


      一般情况下,项目都有自己单独的数据库服务器,所以一般使用sqlserver身份验证的方式。而且sa
用户一般不要启用,单独建立数据库的专用首先账户比较安全。


1、 连接数据库 


    首先要创建连接字符串,基本格式如下


     Data Source=.;Initial Catalog=test;User ID=sa;Password=123456


     Data Source 指定我们需要连接的服务器的名称,如果是本机,可以使用.来代表,如果是单独的服务器,可能需要服务器名字或者IP地址。


     Initial Catalog 指定我们需要连接的数据库的名称,因为一个服务器上可能有多个数据库,我们需要指定数据库名称来指定我们需要连接的数据库。


     User ID  连接数据库使用的用户名。


     Password  连接数据库使用的密码。


    下面我们要使用ADONET中的一些类来与服务器通信,告知我们要连接


     SqlConnection类  这个类是用来连接服务器的,实例化这个类,并提供一个连接字符串,就可以连接数据库了


     using ( SqlConnection conn = new SqlConnection ( "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" ) )
            {
                conn.Open ( );
            }


    using代码块的作用是自动关闭我们使用的资源,实际上是实现了IDisposible()接口的。


    SqlConnection conn = new SqlConnection ( "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" )


     这串代码是创建一个连接对象,通过SqlConnection的构造函数,将连接字符串传入就可以得到一个数
据库的连接的实例。


     conn.Open ( )打开数据库连接,打开后我们就可以对数据库进行进一步的操作了。


     由于我们将连接对象放在了using代码块中,所以当我们的连接使用完毕后,系统会自动帮我们关闭数据库连接,以节约服务器的资源,但是如果我们没有将他放在using代码块中,就必须在连接使用完毕后手动的关闭,有两种方法 


     conn.Close ( );
     conn.Dispose ( );


     他们的区别在于,conn.Close ()方法,只是关闭了连接,我们还可以在后续的操作中继续打开这个连接,就像两地间的高速公路,close只是封闭了高速公路,只要再次打开,高速公路还是可以使用。


     而conn.Dispose ()方法时销毁了连接 ,我们不能再次使用这个连接了,就像高速公路被拆掉了,如果我们需要再次连接数据库,那我们只能再修一条高速公路,即再次创建一个SqlConnection 实例。


     实际上,susing{}代码块在结束后也是调用conn.Dispose ()方法的。


     推荐使用using代码块的方式来释放连接。


2、向数据库发送sql语句并执行


  using ( SqlConnection conn = new SqlConnection ( "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" ) )
            {
                conn.Open ( );
                using ( SqlCommand cmd = new SqlCommand() )
                {
                    cmd.CommandText = "insert into T_user values ('aaa',100)";
                    cmd.Connection = conn;
                    cmd.ExecuteNonQuery ( );
                }
            }


        SqlCommand是命令对象,它的作用是构建sql语句并发送给数据库服务器。
        SqlCommand cmd = new SqlCommand()新建一个命令对象
        cmd.CommandText = "insert into T_user values ('aaa',100)";  CommandText属性存储的就是我们需要执行的sql语句。
        cmd.Connection = conn;  Connection属性指示这个命令对象将被发送到哪个数据库连接对象。
        cmd.ExecuteNonQuery ( );通知服务器执行sql语句,ExecuteNonQuery ( )方法时用来执行非查询语句的,也就是像insert update delete 等语句。它返回的是受影响的行数。
          cmd.ExecuteReader()和cmd.ExecuteScalar()方法时用来执行select语句的,他们的不同之处在于返回值不同
          cmd.ExecuteReader()方法返回的是一个SqlDataReader对象,也就是结果集,我们可以通过SqlDataReader的read()方法来读取结果集的每一行数据。
          cmd.ExecuteScalar()方法返回的是结果集的第一行第一列的数据,是一个object对象。通常这个方法用来执行一些有且只有一行一列返回值的sql语句。
          另外md.ExecuteScalar()方法还可以用于查看插入数据时,系统自动生成的自增长字段的值,我们必须改造下sql语句。
           using ( SqlConnection conn = new SqlConnection ( "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" ) )
            {
                conn.Open ( );
                using ( SqlCommand cmd = new SqlCommand() )
                {
                    cmd.CommandText = "insert into T_user(name,age)  output inserted.id  values ('aaa',100)";
                    cmd.Connection = conn;
                    int i = (int)cmd.cmd.ExecuteScalar ( );
                }
            }


       insert into T_user(name,age) OUTPUT inserted.id  values ('aaa',100)"语句的作用是插入一条数据,并且返回刚插入数据的id值,
       注明,id是T_user表中的一个自增字段。


3、读取数据库返回的结果


      using ( SqlConnection conn = new SqlConnection ( "Data Source=.;Initial Catalog=test;User ID=sa;Password=123456" ) )
            {
                conn.Open ( );
                using ( SqlCommand cmd = new SqlCommand() )
                {
                    cmd.CommandText = "select * from T_user";
                    cmd.Connection = conn;
                    SqlDataReader reader = cmd.ExecuteReader ( );
                    
                    while ( reader.Read() )
                    {
                        MessageBox.Show (reader.GetInt32(0)+reader.GetString(1)+reader.GetInt32(2));
                    }
                }
            }
       注意,对于查询语句,我们使用的提交方法是cmd.ExecuteReader ( ),它返回一个SqlDataReader
类的对象,这个对象存储了我们的查询结果。
       SqlDataReader reader = cmd.ExecuteReader ( ); 申明一个SqlDataReader 对象来存储结果。
       SqlDataReader 类有一个Read()方法,用来依次读取当前数据的一行,如果有数据,返回true,如果没有数据了,返回false。所以我们可以用这个来作为循环条件来依次访问每行数据。
       SqlDataReader 类 的方法GetInt32()和GetString()方法用来读取当前行的某一列的数据,参数为他们的列号,列号从0开始。
       SqlDataReader 类的 GetOrdinal()方法时根据列名来获取列号的,参数为列名。
      
            Windows Phone 7手机开发.Net培训、期待与您交流!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值