在用asp.net开发网站中,有很多种用于访问数据库的方法,其中的一种是利用sqlHelper.cs类封装的函数对数据库进行访问,其原理用得是ADO.net。
本文基本框架
- 连接数据库
- 获取数据-Command对象
- 获取数据-填充数据集
- 完整代码
连接数据库我们需要创建一个SqlConnection
对象。需要引用System.Data
和System.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对象 | 描述 |
---|---|
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";
SqlCommand
对象 SqlCommand com = new SqlCommand("select * from DataTable", connection);
SqlConnection
的CreateCommand
方法创建 SqlCommand com = connection.CreateCommand();
SqlDataAdapter
对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁,能够用来保存和检索数据。这里主要用其Fill方法填充DataTable
和DataSet
。DataAdapter
对应不同的数据库自然会有不同的对象,对应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
语句的具体用法请查阅其他资料。