编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

C#知识|账号管理系统:使用带参数的SQL语句编程添加账号的方法。

wxchong 2024-10-21 13:04:06 开源技术 63 ℃ 0 评论

哈喽,你好啊,我是雷工!

前边学习了登录窗体的实现,接下来接着学习使用带参数的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#爱好者可以围观,一起学习进步。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表