利用sqlHelper.cs访问sql server数据库 -- asp.net开发

在用asp.net开发网站中,有很多种用于访问数据库的方法,其中的一种是利用sqlHelper.cs类封装的函数对数据库进行访问,其原理用得是ADO.net。


本文基本框架
- 连接数据库
- 获取数据-Command对象
- 获取数据-填充数据集
- 完整代码


连接数据库

连接数据库我们需要创建一个SqlConnection对象。需要引用System.DataSystem.Data.SqlClient命名空间。

常用连接字符串参数说明

参数 说明
Data Source 要连接的数据库实例的名称或网络地址(可以在名称后指定端口号)指定本地实例可用”(Local)”或者”.”
Initial Catalog 数据库的名称
User Id 登录帐户
Password 登陆密码



创建SqlConnection对象的方法:

  • 在创建SqlConnection对象时创建connectionString
string connectionString = "Data Source=.;Initial Catalog=StudentsInfoDb;User Id=sa;Password=123456";
SqlConection connection = new SqlConnection(connectionString);
connection.Open();
  • 通过一个对象保存一个字符串,适应在不同的地方调用的情况
public class ConString{
    public static string connectionString = "Data Source=.;Initial Catalog=StudentsInfoDb;User Id=sa;Password=123456";
}

SqlConection connection = new SqlConnection(ConString.connectionString);
connection.Open();
  • Web.config中的节点利用键值对来存储(推荐)

<connectionStrings>
   <add name="connstr" connectionString="Data Source=(local);Initial Catalog=StudentsInfoDb;User Id=sa;Password=123456">add>
connectionStrings>
//实现代码
public static readonly string constr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

SqlConnection connection = new SqlConnection(constr);
connection.Open();
//使用之后记得关闭
connection.Close();

获取数据-Command对象

Command对象主要是用于向服务器发送一些命令,比如典型的增删查更改。主要分为如下四种:

Command对象 描述
SqlCommand 用于对Sql Server数据库执行命令。
OLE DBCommand 用于对支持OLE DB的数据库执行命令。
OdbcCommand 用于支持ODBC的数据库执行命令。
OracleCommand 用于对Oracle数据库执行命令。

这里用的是Sql Server,所以以下主要介绍SqlCommand的几个函数。

函数名 描述
ExecuteNonQuery 类型为int,执行不返回结果的Sql语句,包括INSERT、UPDATE、DELETE、CREATE TABLE、CTEATE PROCEDURE以及不返回结果的存储过程
ExecuteScalar 类型为Object,执行返回单个值的SQL语句,如Count(*)、Sum(),Avg()等聚合函数,或者查询记录中的某一个值。

创建SqlCommand的方法:

  • 创建SqlCommand对象,并指定Sql命令和数据库连接
SqlCommand com = new SqlCommand();
com.Connection = connection;
com.CommandText = "select * from DataTable";
  • 用sql语句和数据库连接做参数,创建SqlCommand对象
SqlCommand com = new SqlCommand("select * from DataTable", connection);
  • 利用SqlConnectionCreateCommand方法创建
SqlCommand com = connection.CreateCommand();

获取数据-填充数据集

SqlDataAdapter 对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁,能够用来保存和检索数据。这里主要用其Fill方法填充DataTableDataSetDataAdapter对应不同的数据库自然会有不同的对象,对应Sql Server的为SqlDataAdapter

  • 一个简单的例子
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = "select * from BookInfo";

DataSet dataSet = new DataSet();
DataTable bookTable = new DataTable("BookTable");
dataSet.Tables.Add(bookTable);
//adapter.Fill(dataSet.BookTable);
datapter.Fill(dataSet,"bookTable");

在以上代码中,我们并没有看到连接数据库。其实,在调用Fill()方法时会自动打开关闭的数据库,使用完毕后再自动关闭。如果调用前该连接就处在打开状态,则操作后连接仍然保持连接状态。
我们可以用SqlCommand来创建SqlDataAdapter 对象,具体代码看完整代码。

完整代码

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace SalaryCalculate.Operations
{

    //利用ADO.NET访问数据库,获取数据库数据
    public class SqlHelper
    {
        //数据库连接字符串
        public static readonly string constr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

        //打开数据库
        public static SqlConnection OpenConnection()
        {
            SqlConnection conn = new SqlConnection(constr);
            conn.Open();
            return conn;
        }

        //执行不返回结果的sql,用于插入和更新,删除
        public static int ExecuteNonQuery(string cmdText,params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(constr))
            {
                conn.Open();
                return ExecuteNonQuery(conn,cmdText,parameters);
            }
        }

        //上面方法的重载方法
        public static int ExecuteNonQuery(SqlConnection conn,string cmdText,params SqlParameter[] parameters)
        {
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = cmdText;
                cmd.Parameters.AddRange(parameters);
                return cmd.ExecuteNonQuery();
            }
        }

        //返回对象类型的sql查询,对象单个数据记录的中的某个值,或者count(*)计算的结果,在分页中会经常用到。
        public static object ExecuteScalar(string cmdText,params SqlParameter[] parameters)
        {
            using(SqlConnection conn = new SqlConnection(constr))
            {
                conn.Open();
                return ExecuteScalar(conn,cmdText,parameters);
            }
        }

        //以上方法的重载方法
        public static object ExecuteScalar(SqlConnection conn,string cmdText,params SqlParameter[] parameters)
        { 
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = cmdText;
                cmd.Parameters.AddRange(parameters);
                return cmd.ExecuteScalar();
            }
        }

        //获得数据表格的查询
        public static DataTable ExecuteDataTable(string cmdText,params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(constr))
            {
                conn.Open();
                return ExecuteDataTable(conn,cmdText,parameters);
            }
        }

        //以上方法的重载
        public static DataTable ExecuteDataTable(SqlConnection conn ,string cmdText,params SqlParameter[] parameters)
        {
            using (SqlCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = cmdText;
                cmd.Parameters.AddRange(parameters);
                using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
                {
                    DataTable dt = new DataTable();
                    adapter.Fill(dt);
                    return dt;
                }
            }
        }
    }
}

按照我们之前的说法,在使用完SqlConnection是必须将其关闭的,但这里并没有看到Close函数,这是因为using语句包含的对象在使用后会自动释放资源,因此无需手动关闭。using 语句的具体用法请查阅其他资料。

你可能感兴趣的:(asp.net)