A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 自由の风 中级黑马   /  2013-11-20 18:04  /  2438 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 自由の风 于 2013-11-21 12:56 编辑

假如我写了一个SqlHelper类,里边有一个ExexuteNonQuery方法要往里传一个sql语句的字符串如
public static DataSet ExecuteDataset(string sql)
在传入sql字符串时要防止注入式漏洞,要用到Parameter方法比如
DataSet result=SqlHelper.ExecuteDataset("select * from Table_1 where Name=@name")
不用SqlHelper的话,
cmd.CommandText="select * from Table_1 where Name=@name"
cmd.Parameters.Add(new SqlParameter("@name",XXX))就行了
要用SqlHelper该怎么把参数XXX加进去?

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 加油

查看全部评分

7 个回复

正序浏览
  1. public static object ExecuteScalar(string sql, params SqlParameter[] cmdParams)//查询返回第一行第一列 object
  2.     {

  3.         SqlCommand cmd = new SqlCommand(sql, conn);
  4.         foreach (SqlParameter parm in cmdParams)
  5.         {
  6.             cmd.Parameters.Add(parm); //这里添加参数
  7.         }
  8.         try
  9.         {
  10.             conn.Open();
  11.             object o = cmd.ExecuteScalar();
  12.             return o;
  13.         }
  14.         catch
  15.         {
  16.             return null;
  17.         }
  18.         finally
  19.         {
  20.             cmd.Dispose();
  21.             conn.Close();
  22.             conn.Dispose();
  23.         }
  24.     }
复制代码
回复 使用道具 举报
Sayme 发表于 2013-11-20 22:55
楼主你这个是基础都没看的

现在都不用DataSet了  都改用 datatable了

答非所问
回复 使用道具 举报
1.要实现变长参数化需要使用params
2.用SqlParameter[] parameters数组接受参数
3.用comm.Parameters.AddRange(parameters);动态添加参数.
public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn=new SqlConnection(connstr))
            {
                conn.Open();
                using (SqlCommand comm=conn.CreateCommand())
                {
                    comm.CommandText = sql;
                    comm.Parameters.AddRange(parameters);
                    SqlDataAdapter adapter = new SqlDataAdapter(comm);
                    DataSet set = new DataSet();
                    adapter.Fill(set);
                    return set.Tables[0];
                }
            }
        }

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主你这个是基础都没看的

现在都不用DataSet了  都改用 datatable了
回复 使用道具 举报
u010209195 发表于 2013-11-20 21:33
params是不确定长度,需要放到参数列表的最后一个,若传入的有参数,则可以添加参数,没有参数的话就不用添 ...

方法的返回值DataTable也可以是DataSet,只要把最后的返回值那里修改下就行了,杨老师2012年的公开课里面讲过这个内容 SqlHelper
回复 使用道具 举报
  1.         public static DataTable ExecuteDataTable(string sql,params SqlParameter[] parameter)
  2.         {
  3.             //建立程序和数据库之间的链接
  4.             using (SqlConnection conn = new SqlConnection(str))
  5.             {
  6.                 //打开数据库
  7.                 conn.Open();
  8.                 using (SqlCommand cmd = conn.CreateCommand())
  9.                 {
  10.                     //设置要对数据库执行的Sql语句
  11.                     cmd.CommandText = sql;
  12.                     cmd.Parameters.AddRange(parameter);
  13.                     //管理Command对象,主要用于查询或更新数据
  14.                     SqlDataAdapter dataadapter = new SqlDataAdapter(cmd);
  15.                     //数据集对象,从数据库中取出数据,保存到内存中,即可断开链接
  16.                     DataSet dataset = new DataSet();
  17.                     //填充数据集
  18.                     dataadapter.Fill(dataset);
  19.                     return dataset.Tables[0];
  20.                 }
  21.             }
  22.         }
复制代码
params是不确定长度,需要放到参数列表的最后一个,若传入的有参数,则可以添加参数,没有参数的话就不用添加

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 赞一个!

查看全部评分

回复 使用道具 举报
public static DataSet ExecuteDataset(string sql, params SqlParameter[] args)
如果传过来参数了,cmd.Parameters.AddRange(args);就可以了,
没有就不加!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马