一道练习题引申出来的知识点(六) ADO.NET常用命令 以及相关概念

文接上回
这一篇文章介绍ADO.NET

什么是ADO.Net
ActiveX Data Objects
ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类用类操作文件一样, System.Data.这组类是用来操作数据库(不光是MSSql Server),它提供了统一的编程接口让操作其它数据库(Access、Oracle等)的方式和操作MSSql Server一致
简单的来说就是一句话,用来连接数据库

在ADO.Net中连接数据库的步骤
-> 创建连接通道(SqlConnection)
-> 创建SQL命令对象(SqlCommand)
-> 开始查询

创建数据库的连接信息的字符串
用法1.使用Sql Sever2008 身份验证
// 书写格式
string str_con = @"server=机器名\实例名;database=数据库名;用户名=sa;密码=设置的密码";
// 例子
string str_con = @"server=.\sqlexperess;database=nreStu;uid=sa;pwd=123";

用法2:使用Windows身份验证
// 书写格式
string Stu_con = @"server=机器名\实例名;database=数据库名;integrated security=true";
// 例子
string Str_con = @"server=.\sqlexpress;database=newSru;integrated security=true";

添加config配置文件连接字符串(.net frameworl4.0才能实现)
1. 添加一个应用程序配置文件
2. 添加以下代码
<connectionStrings>
    <add name="sql" connectionString="server=.\sqlexpress;database=newTextADO;integrated security=true"/>
</connectionStrings>
3. 添加引用 System.Configuration
4. 添加命名空间 using System.Configuration;
5. 读取 并使用
string str_con = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;


执行插于语句  ExecuteNonQuery();
此用法只返回受影响的行数 适用于 增、删、改
// 添加命名空间
using System.Data.SqlClient;

// 拼接连接字符串需要用到的信息
string str_sqlCon = @"server=.\sqlexpress;database=Stu_text1000;integrated security=true";

// 使用信息创建连接 因为连接完要释放资源 所以要using
using (SqlConnection sqlCon=new SqlConnection(str_sqlCon))
{
     // 执行sql语句 因为执行完要释放资源 所以要using
     using (SqlCommand sqlCom=new SqlCommand(sb.ToString(),sqlCon))
     {
   // 判断是否连接 如果,没有连接 那么就打开连接
   if(conn.State==System.Data.ConnectionState.Closed)
   {
    // 打开连接
             sqlCon.Open();
}
           // 执行sql语句 返回执行成功的语句条数int
           int messCount=sqlCom.ExecuteNonQuery();
           Console.WriteLine("{0}条数据受影响", messCount);
      }
}

返回第一行第一列的结果 ExecuteScalar();
此种用法常用于聚合函数中 返回单一的值

// 创建数据库的各种信息
string str_con = @"server=.\sqlexpress;database=newStu;integrated security=true";
           
using (SqlConnection conn = new SqlConnection(str_con))
{
    // 创建sql语句 查找年龄是20的 同学的个数
    string sql = @"select count(*) from T_Persons where FAge=20";

    // 创建连接
    using (SqlCommand com = new SqlCommand(sql, conn))
    {
         // 判断连接是否关闭 如果关闭 就打开连接
         if (conn.State == System.Data.ConnectionState.Closed)
         {
              conn.Open();
         }
         // 返回第一行第一列的结果
   // 这里使用 Convert
         int count = Convert.ToInt32(com.ExecuteScalar());
         Console.WriteLine("一共{0}个人", count);
    }
}

返回多条数据 ExecuteReader();
此种用法常用于查询表中的多条数据

// 创建数据库信息的字符串
string Str_con = @"server=.\sqlexpress;database=newStu;integrated security=true";

// 创建连接
using (SqlConnection conn=new SqlConnection(Str_con))
{
     // 准备sql语句 查看全表
     string sql = @"select * from T_Persons";
     // 执行sql语句
     using (SqlCommand com=new SqlCommand(sql,conn))
     {
          // 判断连接是否关闭 如果关闭 就将连接打开
          if (conn.State== System.Data.ConnectionState.Closed)
          {
               conn.Open();
          }

           // 执行sql语句 返回多条数据
           SqlDataReader rader= com.ExecuteReader();

            // 判断表中是否有数据
            if (rader.HasRows)
            {
                // 一直读下一条语句 指向下一个数据
                while (rader.Read())
                {
      // 括号中的数字是字段的编号 从0开始
                     int id = rader.GetInt32(0); // 返回id字段的数据
                     string name = rader.GetString(1); // 返回那么字段
                     string gender = rader.GetString(2); // 返回gender字段
                     int age = rader.GetInt32(3); // 返回age字段

      // 第一种用法
                     Console.WriteLine("{0}\t{1}\t{2}\t{3}", id, name, gender, age);
      // 第二种用法
     Console.WriteLine("{0}\t{1}\t{2}\t{3}", rader["FId"], rader["FName"], rader["FGender"], rader["FAge"]);

                  }
             }
        }
 }

使用参数化后的SQL语句进行查询
            string uid = txtUid.Text; // 得到输入的uid
            string pwd = txtPwd.Text; // 得到输入的pwd

            string str_con = @"server=.\sqlexpress;database=loadDataBase;integrated security=true";

            using (SqlConnection conn=new SqlConnection(str_con))
            {
                // 准备一条参数化后的sql语句 
                string sql = @"select count(*) from T_UserTable where
FUserName=@uid and FPassWord=@pwd";

    /这是一条未参数化的语句 跟上面的等价
    string sql = string.Format(@"select count(*) from T_UserTable where FUserName='{0}' and FPassWord='{1}'", uid, pwd);

                using (SqlCommand com=new SqlCommand(sql,conn))
                {
                    // 参数化sql查询

     //  方法一:使用ADD 要new
                    com.Parameters.Add(new SqlParameter("@uid", uid));
                    com.Parameters.Add(new SqlParameter("@pwd", pwd));

     // 方法二:使用 AddWithValue 不用new
                    cmd.Parameters.AddWithValue("@uid", uid);
                    cmd.Parameters.AddWithValue("@pwd", pwd);

     // 方法三:加入SqlParameter[]
     cmd.Parameters.Clear(); // 使用前记得要清空数组
     SqlParameter[] paras =
     {
      new SqlParameter("@Name",m.Name),
      new SqlParameter("@Gender",m.Gender),
      new SqlParameter("@Age",Convert.ToInt32(m.Age)),
     };
                    
     // 将参数放在cmd中 与sql语句一起执行
     cmd.Parameters.AddRange(paras);

     // 判断数据库连接是否关闭
                    if (conn.State== System.Data.ConnectionState.Closed)
                    {
      // 如果关闭 就开启
                        conn.Open();
                    }

     // 执行SQL语句
                    int count =com.ExecuteNonQuery();
                   
     Console.WriteLine("成功执行 {0} 条语句",count);
                }
           


判断数据库连接是否关闭,如果关闭就打开连接
// 判断是否连接 如果,没有连接 那么就打开连接
if(conn.State==System.Data.ConnectionState.Closed)
{
 // 打开连接
    sqlCon.Open();
}

ADO.Net中常用的三个方法
-> ExecuteNonQuery() 处理增、删、改,返回受影响行数
-> ExecuteScalar() 处理查询,返回首行首列
-> ExecuteReader() 处理查询,返回DataReader对象

 

 

(作者注释:由于我的笔记是.doc格式的 所有的标题都有超链接以及标题颜色 如果直接复制过来的话会有格式不支持的情况 为了统一 我在全部转换成了txt  所以会没有颜色 希望大家见谅)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值