网站首页 > 开源技术 正文
哈喽,你好啊,我是雷工!
前边学习了登录窗体的实现,接下来接着学习使用带参数的SQL语句编程添加账号的方法。
以下为学习笔记。
01 非带参数方法
在DAL数据访问层编写AccountServer.cs类代码。
按照前面的练习,写法如下:
public int AddAccount(Account account)
{
//定义SQL语句
string sql = "insert into Account(AccountName,AccountContent,originality,TypeId)";
sql += #34;values('{account.AccountName}','{account.AccountContent}','{account.originality}','{account.TypeId}')";
//执行SQL语句
return SQLHelper.Update(sql);
}
该写法存在两个问题:
问题1:单引号使用起来比较麻烦;
问题2:该写法存在注入式攻击的风险;
为解决注入式攻击问题,微软有两个解决方案:
方案1:使用带参数的SQL语句;
方案2:使用存储过程方式;
02 使用带参数语句
接下来将上述方法的写法修改为带参数的SQL语句写法;
方法代码为:
public int AddAccount(Account account)
{
//定义SQL语句
string sql = "insert into Account(AccountName,AccountContent,originality,TypeId)";
sql += "values(@AccountName,@AccountContent,@originality,@TypeId)";
//封装SQL语句中的参数
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@AccountName",account.AccountName),
new SqlParameter("@AccountContent",account.AccountContent),
new SqlParameter("@originality",account.originality),
new SqlParameter("@TypeId",account.TypeId),
};
//执行带参数的SQL语句
return SQLHelper.Update(sql,param);
}
使用该写法需要调整下通用数据访问类SQLHelper中Update的写法。
03 优化Update方法
由于上边使用带参数的SQL语句编程,添加了数组参数param,所以优化思路是在原方法的基础上增加SqlParameter[]param参数,
且为了兼容无该参数的也能使用该方法,给该参数赋值null,
然后在方法内进行if判断即可。
优化后的方法代码如下:
/// <summary>
/// 执行增删改操作
/// </summary>
/// <param name="sql">普通sql语句或带参数的SQL语句</param>
/// <param name="param">参数数组</param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static int Update(string sql, SqlParameter[]param=null)
{
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sql,conn);
if(param!=null)
{
cmd.Parameters.Add(param);
}
try
{
conn.Open();
return cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
//可以在这个地方捕获ex对象的相关信息,然后保存到日志文件中
throw new Exception("执行public static int Update(string sql)发生异常:" + ex.Message);
}
finally
{
conn.Close();
}
}
04 后记
以上就是使用带参数的SQL语句编写添加账号的方法的学习笔记,该方法实用性强,
且考虑了SQL语句防注入攻击的风险,实际项目中可直接复制使用。
接下来学习账号管理系统,添加账号功能UI层的内容,有感兴趣的C#爱好者可以围观,一起学习进步。
猜你喜欢
- 2024-10-21 C#实战|人员管理系统[13]:修改密码功能的实现
- 2024-10-21 mybatis-plus sql注入原理(3.0.1)
- 2024-10-21 C#实战|人员管理系统[22]:按照所属组织名称查询人员列表
- 2024-10-21 C#实战|人员管理系统[33]:实现删除人员信息的功能
- 2024-10-21 C#实战|人员管理系统[32]:修改人员信息的实现
- 2024-10-21 实例讲解MyBatisPlus自定义sql注入器方法
- 2024-10-21 SQL辅助类(sql添加辅助数据库文件)
- 2024-10-21 SQL注入攻防入门详解(简单的sql注入攻击教程)
- 2024-10-21 SQL - 编写SqlHelper帮助类,简化数据操作代码 173
- 2024-10-21 ADO.Net-SQLHelper帮助类 158(帮助列表)
你 发表评论:
欢迎- 03-19基于layui+springcloud的企业级微服务框架
- 03-19开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- 03-19SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- 03-19SpringBoot+LayUI后台管理系统开发脚手架
- 03-19layui下拉菜单form.render局部刷新方法亲测有效
- 03-19Layui 遇到的坑(记录贴)(layui chm)
- 03-19基于ASP.NET MVC + Layui的通用后台开发框架
- 03-19LayUi自定义模块的定义与使用(layui自定义表格)
- 最近发表
-
- 基于layui+springcloud的企业级微服务框架
- 开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- SpringBoot+LayUI后台管理系统开发脚手架
- layui下拉菜单form.render局部刷新方法亲测有效
- Layui 遇到的坑(记录贴)(layui chm)
- 基于ASP.NET MVC + Layui的通用后台开发框架
- LayUi自定义模块的定义与使用(layui自定义表格)
- Layui 2.9.11正式发布(layui2.6)
- Layui 2.9.13正式发布(layui2.6)
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)