ADO.NET增删改查

ADO.Net : .NET平台上唯一的数据库访问技术
一、增删改
前期准备:
1、引用程序集 .dll (默认引入了)
2、在需要访问数据库的类中通过using关键字引入命名空间
using System.Data;
using System.Data.SqlClient;

操作步骤:
1、建立连接
创建数据库连接对象

SqlConnection conn = new SqlConnection();  

2、初始化连接
a.通过设置连接对象的ConnectionString属性

conn.ConnectionString = "server=.;database=test001;uid=sa;pwd=001128;";

b.通过构造方法来初始化数据库连接对象

SqlConnection conn = new SqlConnection(conStr);

3、打开连接
调用连接对象的open方法打开连接

 conn.Open();

需要在finally中释放资源
连接对象(IO流)在C#中都属于非托管类资源,需要手动释放,托管对象会由垃圾回收器自动回收

在C#中提供了一种专门针对此类对象的管理方式 using

语法using(非托管类对象的创建){
         使用;(一旦离开这个范围,自动释放)
    }

4、创建命令对象

 SqlCommand cmd = new SqlCommand();

5、初始化命令对象
a. SqlCommand cmd = new SqlCommand();
cmd.CommandText = “”;//设定命定内容
cmd.Connection = conn;//将命令对象绑到之前的连接上
b.调用命令的构造方法

  String cmdText = "";
   SqlCommand cmd = new SqlCommand(cmdText,conn);

6、调用命令对象
ExecuteNonQuery()方法用于增删改数据,执行不返回值的语句
ExecuteRead()方法用于查询多行多列数据
ExecuteScalar()方法用于查询单个值,返回单个值,如执行带COUNT(*)语句

1、参数化查询

2、通过字符串拼接的方式将查询参数注入到sql语句中存在严重的注入漏洞

string sql = "update Subject  set Classhour=@ClassHour where    SubjectName=@SubjectName";
            SqlCommand cmd = new SqlCommand(sql, conn);
            //写入参数     
            SqlParameter para1 = new SqlParameter("@ClassHour", ClassHour);
            SqlParameter para2 = new SqlParameter("@SubjectName", SubjectName);
            cmd.Parameters.Add(para1);
            cmd.Parameters.Add(para2);      

查询:

一、在线查询:(在线状态下访问结果)
通过一个SqlDataReader对象(读取器)去读取数据库服务器上的查询结果
特点:读取过程必须保证连接畅通运行状态的限制
不可靠,受数据库服务器
(优点,不占用应用服务器内存)

二、离线查询:(离线状态下访问结果)
将查询得到的结果直接返回到本地应用程序服务器,可以关闭连接的情况下访问查询结果集(推荐)

操作步骤:
1、前期准备
2、准备一个查询的命令对象
3、在应用程序中事先准备一个容器接受查询回来的结果,改容器由DataSet对象来充当

 DataSet dateSet = new DataSet();//数据集对象

4、还需准备一个数据适配器对象,用来托管执行的命令,并将命令执行后得到的查询结果填充到DataSet容器中

   SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);//数据适配器对象

5、调用适配器对象的Fill方法执行查询并向本地数据集中填充查询结果

sqlDataAdapter.Fill(dataSet);

6、从set中取出结果并使用

  DataTable ds= dataSet.Tables[0];

7、遍历结果表的每一行

foreach (DataRow row in ds.Rows)
{
Console.WriteLine(row[“SubjectName”]);
}

三、将数据库连接字符串外置到配置文件,便于后期更改,避免硬编码

每个项目都有一个App.confing的文件,对于web项目也叫Web.config,用于存放配置文件

1、App.confing配置文件中提供了一个专用的数据库连接字符串配置标签

<connectionStrings>
    <add name="connString" connectionString="server=.;database=myschool;uid=sa;pwd=001128;"/>
  </connectionStrings>//只能配连接字符串

读取配置文件中的信息
①、添加对System.Configuration程序集的引用
右键引用–>添加引用–>程序集–>查找System.Configuration并添加
②、引入配置文件管理类所在的namespace
using System.Configuration;
③、通过访问ConfigurationManager提供的静态属性直接去获取配置文件中的信息

 String conStr = ConfigurationManager.ConnectionStrings["connString"].ConnectionString;

2、另一种配置方式 AppSettings
注意:一个配置文件中只能出现一次AppSettings,可以配置任何文件

 <appSettings>
    <add key="connString" value="server=.;database=myschool;uid=sa;pwd=001128;"/>
  </appSettings>

读取方式:

  String conStr = ConfigurationManager.AppSettings["connString"];

四、DBHelper类简化版

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace WindowsFormsApplication5
{
    public class SqlHelper
    {
        //数据库连接
        private static readonly string connString = "server=.;database=BookShopPlus;uid=sa;pwd=001128";
        //增删改
        public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {

                    cmd.Parameters.AddRange(parameters);                    
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        //查询单值
        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }
        }
        //查询多值
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            DataSet set = new DataSet();
            using (SqlConnection conn = new SqlConnection(connString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.Parameters.AddRange(parameters);
                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);
                    adapter.Fill(set);
                    return set.Tables[0];
                }
            }
        }
    }
}

简单使用

 //查询单个值
      int i=  (int) DBhelper.ExecuteScalar("select count(*) from subject");
      Console.WriteLine(i);
      //增删改
      int ii = (int)DBhelper.ExecuteNonQuery("delete from subject where SubjectId=20");
      Console.WriteLine(ii);
      //查询多条数据
      DataTable dt = DBhelper.ExecuteDataTable("select * from subject");
      foreach (DataRow row in dt.Rows)
      {
          Console.WriteLine(row["SubjectName"]);
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值