大家好,欢迎来到IT知识分享网。
哈喽,你好啊,我是雷工!
前边学习了登录窗体的实现,接下来接着学习使用带参数的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#爱好者可以围观,一起学习进步。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/87549.html