重拾MVC——第一天:数据库连接与SqlDbHelper
这个 SqlDbHelper 是我参考网上的和以前用过的 SqlDbHelper 自己写的一个非常简单的东西,主要是记录自己的学习情况
首先在Web.config中配置数据库连接字符串:
<connectionStrings>
<add name="TestConnectionStrings" connectionString="Data Source=服务器地址;Initial Catalog=数据库名称;User ID=sa;Password=密码" providerName="System.Data.SqlClient" />
</connectionStrings>
然后新建DbHelper文件夹,创建SqlDbHelper类:
public class DbHelper
{
private string connectionString = "";
protected SqlConnection conn = null; #region //构造函数
public DbHelper()
{
//this.connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DBConnectionString"].ToString();
this.connectionString = ConfigurationManager.ConnectionStrings["TestConnectionStrings"].ConnectionString;
this.conn = new SqlConnection(connectionString);
}
#endregion #region //打开连接
public void OpenDb()
{
if (conn.State != ConnectionState.Open)
{
try
{
conn.Open();
}
catch (SqlException ex)
{
throw ex;
}
}
}
#endregion #region //关闭连接
public void CloseDb()
{
if (!object.Equals(conn, null) && (conn.State != ConnectionState.Closed))
{
conn.Close();
}
}
#endregion #region //释放连接
public void Dispose()
{
if (conn != null)
{
conn.Dispose();
conn = null;
}
}
#endregion #region //执行单条SQL(插入、更新、删除)
/// <summary>
/// 执行单条SQL(插入、更新、删除)
/// </summary>
/// <param name="sql_"></param>
public void ExecuteNonQuery(string sql_)
{
try
{
OpenDb();
SqlCommand cm = new SqlCommand(sql_, conn);
cm.ExecuteNonQuery();
cm.Dispose();
cm = null;
CloseDb();
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql_);
}
}
#endregion #region //用于执行带参的SQL(插入、更新、删除)
/// <summary>
/// 用于执行带参的SQL(插入、更新、删除)
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameter">参数化查询</param>
/// <returns>有多少语句执行成功</returns>
public int ExecuteNonQuery(string sql, params SqlParameter[] parameter)
{
try
{
OpenDb();
SqlCommand cmd = conn.CreateCommand();
//SqlCommand cm = new SqlCommand(sql_, conn);
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql);
}
}
#endregion #region //执行查询语句,返回SqlDataReader
/// <summary>
/// 执行查询语句,返回SqlDataReader
/// </summary>
/// <param name="sql"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameter)
{
try
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
//return cmd.ExecuteReader(CommandBehavior.CloseConnection);
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return myReader;
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql);
}
}
#endregion #region //执行查询语句,返回DataTable
/// <summary>
/// 执行查询语句,返回DataTable
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms"></param>
/// <returns>DataSet</returns>
public DataTable GetDataTable(string sql, params SqlParameter[] parameter)
{
try
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter); using (var da = new SqlDataAdapter(cmd))
{
var dt = new DataTable();
var ds = new DataSet();
try
{
da.Fill(ds, "ds");
if (ds.Tables.Count <= 0)
return null;
dt = ds.Tables[0]; cmd.Parameters.Clear();
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
}
return dt;
}
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql);
}
}
#endregion #region //执行查询语句,返回DataSet
/// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms"></param>
/// <returns>DataSet</returns>
public DataSet GetDataSet(string sql, params SqlParameter[] parameter)
{
using (var connection = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter); using (var da = new SqlDataAdapter(cmd))
{
var ds = new DataSet();
try
{
da.Fill(ds, "ds");
cmd.Parameters.Clear();
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
}
#endregion }
在这其中,先获得Web.config中的连接数据库的字符串:
private string connectionString = "";
protected SqlConnection conn = null; #region //构造函数
public DbHelper()
{
//this.connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["DBConnectionString"].ToString();
this.connectionString = ConfigurationManager.ConnectionStrings["TestConnectionStrings"].ConnectionString;
this.conn = new SqlConnection(connectionString);
}
#endregion
然后写连接打开/关闭/释放的方法
#region //打开连接
public void OpenDb()
{
if (conn.State != ConnectionState.Open)
{
try
{
conn.Open();
}
catch (SqlException ex)
{
throw ex;
}
}
}
#endregion #region //关闭连接
public void CloseDb()
{
if (!object.Equals(conn, null) && (conn.State != ConnectionState.Closed))
{
conn.Close();
}
}
#endregion #region //释放连接
public void Dispose()
{
if (conn != null)
{
conn.Dispose();
conn = null;
}
}
#endregion
下面写增删改的方法,我写了两种,带参的和不带参的
#region //执行单条SQL(插入、更新、删除)
/// <summary>
/// 执行单条SQL(插入、更新、删除)
/// </summary>
/// <param name="sql_"></param>
public void ExecuteNonQuery(string sql_)
{
try
{
OpenDb();
SqlCommand cm = new SqlCommand(sql_, conn);
cm.ExecuteNonQuery();
cm.Dispose();
cm = null;
CloseDb();
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql_);
}
}
#endregion #region //用于执行带参的SQL(插入、更新、删除)
/// <summary>
/// 用于执行带参的SQL(插入、更新、删除)
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameter">参数化查询</param>
/// <returns>有多少语句执行成功</returns>
public int ExecuteNonQuery(string sql, params SqlParameter[] parameter)
{
try
{
OpenDb();
SqlCommand cmd = conn.CreateCommand();
//SqlCommand cm = new SqlCommand(sql_, conn);
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql);
}
}
#endregion
然后是查询,查询我写了三种,第一中返回的 SqlDataReader :
#region //执行查询语句,返回SqlDataReader
/// <summary>
/// 执行查询语句,返回SqlDataReader
/// </summary>
/// <param name="sql"></param>
/// <param name="parameter"></param>
/// <returns></returns>
public SqlDataReader ExecuteReader(string sql, params SqlParameter[] parameter)
{
try
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter);
//return cmd.ExecuteReader(CommandBehavior.CloseConnection);
SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
cmd.Parameters.Clear();
return myReader;
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql);
}
}
#endregion
这里用完一定要对SqlDataReader进行Close
第二种返回的DateTable:
#region //执行查询语句,返回DataTable
/// <summary>
/// 执行查询语句,返回DataTable
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms"></param>
/// <returns>DataSet</returns>
public DataTable GetDataTable(string sql, params SqlParameter[] parameter)
{
try
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter); using (var da = new SqlDataAdapter(cmd))
{
var dt = new DataTable();
var ds = new DataSet();
try
{
da.Fill(ds, "ds");
if (ds.Tables.Count <= 0)
return null;
dt = ds.Tables[0]; cmd.Parameters.Clear();
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
}
return dt;
}
}
catch (Exception ex)
{
throw new Exception(ex.ToString() + " " + sql);
}
}
#endregion
第二种返回的DateSet:
#region //执行查询语句,返回DataSet
/// <summary>
/// 执行查询语句,返回DataSet
/// </summary>
/// <param name="sqlString">查询语句</param>
/// <param name="cmdParms"></param>
/// <returns>DataSet</returns>
public DataSet GetDataSet(string sql, params SqlParameter[] parameter)
{
using (var connection = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameter); using (var da = new SqlDataAdapter(cmd))
{
var ds = new DataSet();
try
{
da.Fill(ds, "ds");
cmd.Parameters.Clear();
}
catch (SqlException ex)
{
throw new Exception(ex.Message);
}
return ds;
}
}
}
#endregion
重拾MVC——第一天:数据库连接与SqlDbHelper的更多相关文章
- 重拾c++第一天(1):环境配置
时过多年,c++基本不记得了,故在此记录相关重拾记录. 学习语言第一步当然是环境配置了(笑),由于暂无用c++进行大型项目开发的需求,所以先下载dev进行过渡. 安装过程非常简单,值得注意的是配置时选 ...
- 重拾MVC——第二天:Vue学习与即时密码格式验证
今天是复习MVC的第二天,准备自己写一个后台管理,然后慢慢写大,做全. 个人感觉做 Web 的,前端知识是必备的,所有今天学习了一下 Vue,很多人用这个,我以前没有用过,今天把它补起来. 比较了各个 ...
- 乡下人重拾MVC——@RenderBody @RenderSection @Html.Partial @Html.Action @Html.RenderPartial @Html.RenderAction
1. @RenderBody() 代表:是一个占位符,是留给子页面的位置,子页面使用这个模版,子页面中的内容会被放到@RenderBody的位置.合并后当作一个整体加载 2. @Render ...
- 重拾C++第一天_WDS
1.面向对象编程的三大特点:封装.继承.多态 2.C++中若不指定类中成员的访问权限默认就是private的(class默认是private的,struct默认是public的). 3.C++规范中类 ...
- 重拾c++第一天(3):数据处理
1.short至少16位:int至少与short一样长:long至少32位,且至少与int一样长:long long至少64位,且至少与long一样长 2.sizeof 变量 返回变量长度 或者s ...
- (二)重拾单片机 第一天 LED灯
由图知道 低电平 亮,高电平 灭 控制第一个 LED1 亮灭程序代码,如下 #include<reg52.h> #define uchar8 unsigned char #define u ...
- 乡下人重拾MVC——创建视图
1. 创建视图都不勾选:代表不使用任何模版,页面的代码即为运行后显示的内容 2. 创建分部视图 代表统会自动把View文件夹下名为“_ViewStart.cshtml”的内容添加到新建的html最上 ...
- 重拾c++第一天(2):基本语法
1.输出方法: cout<<"输出语句" 2.输出时换行为 cout<<endl or "\n" 3.连续赋值是合法的,从右往左依次赋值 ...
- CSS魔法堂:重拾Border之——图片作边框
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
随机推荐
- vue开发(一)安装
1.安装nodejshttps://nodejs.org/zh-cn/ 2.vs2019 工具-获取工具和功能 勾选nodejs开发并安装 3.新建基于vuejs web应用程序 4.右键项目在此处 ...
- 生成要发送到社区的内核补丁时如何指定发布的版本号(v2,v3...)?
1. 生成一个补丁 git format-patch --subject-prefix=v2 -1 那么生成的patch文件就会有如下类似的信息: Subject: [v2] your descrip ...
- 安装mysql问题解决
[root@apollo init.d]# /etc/init.d/mysqld startmy_print_defaults: Can't read dir of '/etc/my.cnf.' (E ...
- 顺序容器删除元素 vector list deque
#include <iostream>#include <list>#include <algorithm>#include <string> usin ...
- matllab 按照文件夹处理文件
folders=dir('文件夹地址'); folders={folders.name}; folders=setdiff(folders,{'.','..'})'; num=length(folde ...
- Ubuntu 18.04设置1920*1080
Ubuntu升级后,发现分辨率没有1920*1080,在网上寻找了一个文章解决办法如下. 方案一(临时性,重启会失效): 1.打开终端.输入:cvt 1920 1080 出现有modeline 的提示 ...
- Django学习参考资料
0. HTTP协议简介http://www.cnblogs.com/maple-shaw/articles/9060408.html 1. 路由系统https://www.cnblogs.com/ma ...
- 客户端热更新框架之UI热更框架设计(下)
上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计 ...
- kindeditor 在JSP 中上传文件的配置
1.将kindeditor,jsp,lib目录下的jar文件放到工程的lib目录下 2.将admin-login.jsp,upload_json.jsp,复制到admin的files目录下 3.复制以 ...
- eNSP——利用单臂路由实现VLAN间路由
原理: 以太网中,通常会使用VLAN技术隔离二层广播域来减少广播的影响,并增强网络的安全性和可管理性.其缺点是同时也严格地隔离了不同VLAN之间的任何二层流量,使分属于不同VLAN的用户不能直接互相通 ...