①【Asp.net】C#SQL Server数据库访问不带参数之ExecuteNonQuery()
不管老方法还是新方法,老类还是新类,新架构还是老架构,融会贯通,温故总能知新!加油!
在项目中,是需要执行很多增删改查,如每执行一次都写一次调用方法的话,就会很多相同的代码。
想起之前看过的几篇关于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()
记录,打板!
- 点赞
- 收藏
- 分享
- 文章举报
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- ASP.NET C# 访问Access、Xml等数据库
- C#和asp.net中链接数据库中参数的几种传递方法实例代码
- asp.net+C# 服务器安装篇---分析器错误信息: 未能加载程序集 app_Web _**** 请确保在访问该页之前已经编译了此程序
- ASP.NET在MOSS中与Webpart数据库的访问参数设置。
- javascript与cs代码互相调用 asp.net中前台javascript与后台C#交互 这里主要包括了javascipt与后台CS代码四种方法互调(其中包括函数与变量的访问)
- ASP.NET中javascript与c#互相访问
- asp.net/c#下用参数化SQL访问时间字段
- 用ASP.NET/C#连接Access和SQL Server数据库
- 在ASP.NET访问Excel文件 (VB and C#)
- c#asp.net url 传递中文参数要使用 System.Web.HttpUtility.UrlEncode 而不能使用Server.UrlEncode
- Access 通用数据访问类(asp.net 2.0 c#)
- 用asp.net/c#连接access和sql server数据库
- ASP.NET中javascript与c#互相访问
- ASP.NET C# 访问Access、Xml等数据库
- Access 通用数据访问类(asp.net 2.0 c#)
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- c# asp.net excel导出 80070005 拒绝访问
- 在ASP.NET访问Excel文件 (VB.NET and C#)
- Asp.Net MVC Html.TextBoxFor日期格式化出错“模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式” 解决办法