不管老方法还是新方法,老类还是新类,新架构还是老架构,融会贯通,温故总能知新!加油!
在项目中,是需要执行很多增删改查,如每执行一次都写一次调用方法的话,就会很多相同的代码。
想起之前看过的几篇关于DbHelperSQL类的博文,可以把一些经常用到的与数据库之间连接执行增删改查的方法汇总成一个类,每次执行相关操作只要调用该DbHelperSQL类中相应的方法就行了。
常用的一些无非就是:SQL语句的增删改、SQL语句带参/不带参查询后返回数据集、SQL带参数的存储过程、ExecuteScalar、ExecuteScalar 无参数…
下面就按照自己的理解分情况稍微整理一下,先从最简单的ExecuteNonQuery()开始吧。
1、我的环境
- Window10
- IIS 10.0
- Visual Studio 2019(asp.net用4.5的框架)
- SQL Server 2014 Management Studio
2、数据库准备
- 建一个简单的测试库SQLTEST
- 建一个测试的user_info表
3、程序准备
vs建一个asp.net web应用程序,命名sqldemo
①Web.config中添加数据库的连接字符串如下:
(百度一下,有很多不同的连接字符串语句的~)
<configuration>......<connectionStrings><add name=\"SQLTEST\" connectionString=\"Data Source=.;Initial Catalog=SQLTEST;User ID=sa;Password=你的数据库sa用户密码\" providerName=\"System.Data.SqlClient\" /></connectionStrings>......</configuration>
②添加一个数据库链接的基类,命名DBHelperSQL
- DBHelperSQL类中ExecuteSql的代码如下:
(第一个所以注释会比较多,后面基本大同小异了,注释就会少~)
using System;using System.Collections.Generic;using System.Data;using System.Data.SqlClient;using System.Linq;using System.Text;using System.Xml;using System.Collections;using System.Configuration;namespace sqldemo.Models{public class DBHelperSQL{/// <summary>/// web.config中配置的name=SQLTEST连接字符串/// </summary>private static readonly string connstr = ConfigurationManager.ConnectionStrings[\"SQLTEST\"].ToString();/// <summary>/// 传入web.config中配置的连接字符串【connstr】,得到数据库的打开链接【connection】/// </summary>private static SqlConnection connection = new SqlConnection(connstr);/// <summary>/// 传入SQL语句,返回执行语句后受影响的行数count/// </summary>/// <param name=\"SQLString\">传入的SQL语句字符串,insert、delete、update</param>/// <returns>受影响的行数count</returns>public int ExecuteSql(string SQLString){//传入调用该方法时传入的SQL语句【SQLString】,和数据库打开连接【connection】,得到一个对数据库执行的命令语句using (SqlCommand command = new SqlCommand(SQLString, connection)){try{connection.Open();//打开数据库连接int count = command.ExecuteNonQuery();//对【command】连接执行后返回受影响的行数return count;//返回执行语句后受影响的行数count}catch (System.Data.SqlClient.SqlException e)//捕获SQL返回的警告或异常{throw e;}//即使trycatch中有return,finally中的代码依然会继续执行finally{connection.Close();//不管是try还是catch,最后都要关闭与数据库之间的连接}}}}}
- 如果不想把数据库的名称写在类中,可以在Web.config中添加一个key
<appSettings>......<add key=\"DBName\" value=\"SQLTEST\" />......</appSettings>
这样就可以通过配置文件Web.config修改连接的数据库名
然后在类中的连接字符串获取就可以如:
private static string dbname = ConfigurationManager.AppSettings[\"DBName\"].ToString();private string static connStr = ConfigurationManager.ConnectionStrings[dbname].ConnectionString;
-
当然也可以在Web.config中添加一个key,value中直接写链接字符串…方法很多,任挑任选~
-
又如果涉及到多库选择的话,比如不同的城市所用的数据库不一样,那在选不同的城市的时候,需要将城市对应的数据库名称当做参数,调用DbHelperSQL类时将数据库名称传进来,获取不同城市连接不同数据库的字符串。
public DBHelperSQL() { }public DBHelperSQL(string dbname){if (!string.IsNullOrEmpty(dbname)){connstr = ConfigurationManager.ConnectionStrings[dbname].ConnectionString;connection = new SqlConnection(connstr);}}
③添加一个数据访问类,命名SqlDAL
- SqlDAL中代码如下:
(写个最简单的调用,实际项目改密码什么的肯定要各种验证通过才行呀~)
public static class SqlDAL{public string update_user_password(string user_password,string user_name){string sql = \"update user_info set user_password=\'\" + user_password + \"\' where user_name = \'\" + user_name + \"\'\";int dt = new DBHelperSQL().ExecuteSql(sql);return dt.ToString();}}
④单元测试
原本是想在前端界面传值,做一个简单的修改用户密码的更新语句执行的触发按钮,实在不想写HTML、JS…最后还是写一个单元测试了,简洁、方便又快捷!
(抚下巴沉思…之后再写一个怎么使用单元测试测试自己写的代码块?这属于扩展知识~就不在这里展开了)
- 单元测试代码如下:
[TestClass]public class UnitTest1{[TestMethod]public void TestMethod1(){string user_name = \"陈学姐\";string user_password = \"202005555\";string result = SqlDAL.update_user_password(user_password,user_name) ;Console.WriteLine(\"受影响行数:\"+result);}
- 单元测试运行后,输出如下图:
返回的是执行更新语句后的影响行数:1
查看数据库中user_info表中的陈学姐用户,密码已经被改成了202005555
4、结尾
还可以用SQL Server Profiler工具去追踪执行的SQL语句的过程,也是属于扩展知识~就不在这里展开了
【Asp.net】C#连接SQL Server数据库之ExecuteNonQuery()
记录,打板!
- 点赞
- 收藏
- 分享
- 文章举报
陈学姐只会增删改查发布了4 篇原创文章 · 获赞 0 · 访问量 87私信关注