网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

SqlParameter的作用与用法

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/06

一般来说,在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有单引号,程序就会发生错误,并且他人可以轻易地通过拼接Sql语句来进行注入攻击。

  1. string sql = "update Table1 set name = ''Pudding'' where ID = ''1''";//未采用SqlParameter   
  2. SqlConnection conn = new SqlConnection();   
  3. conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";//连接字符串与数据库有关   
  4. SqlCommand cmd = new SqlCommand(sql, conn);   
  5. try   
  6. {   
  7. conn.Open();   
  8. return(cmd.ExecuteNonQuery());   
  9. }   
  10. catch (Exception)   
  11. {   
  12. return -1;   
  13. throw;   
  14. }   
  15. finally   
  16. {   
  17. conn.Close();   
  18. }  

上述代码未采用SqlParameter,除了存在安全性问题,该方法还无法解决二进制流的更新,如图片文件。通过使用SqlParameter可以解决上述问题,常见的使用方法有两种,Add方法和AddRange方法。

一、Add方法

  1. SqlParameter sp = new SqlParameter("@name""Pudding");   
  2. cmd.Parameters.Add(sp);   
  3. sp = new SqlParameter("@ID""1");   
  4. cmd.Parameters.Add(sp);  

该方法每次只能添加一个SqlParameter。上述代码的功能是将ID值等于1的字段name更新为Pudding(人名)。

二、AddRange方法

  1. SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@name""Pudding"), new SqlParameter("@ID""1") };   
  2. cmd.Parameters.AddRange(paras);  

显然,Add方法在添加多个SqlParameter时不方便,此时,可以采用AddRange方法。 

下面是通过SqlParameter向数据库存储及读取图片的代码。

  1. view sourceprint?01 public int SavePhoto(string photourl)   
  2. {   
  3. FileStream fs = new FileStream(photourl, FileMode.Open, FileAccess.Read);//创建FileStream对象,用于向BinaryReader写入字节数据流   
  4. BinaryReader br = new BinaryReader(fs);//创建BinaryReader对象,用于写入下面的byte数组   
  5. byte[] photo = br.ReadBytes((int)fs.Length); //新建byte数组,写入br中的数据   
  6. br.Close();//记得要关闭br   
  7. fs.Close();//还有fs   
  8. string sql = "update Table1 set photo = @photo where ID = ''0''";   
  9. SqlConnection conn = new SqlConnection();   
  10. conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";   
  11. SqlCommand cmd = new SqlCommand(sql, conn);   
  12. SqlParameter sp = new SqlParameter("@photo", photo);   
  13. cmd.Parameters.Add(sp);   
  14. try   
  15. {   
  16. conn.Open();   
  17. return (cmd.ExecuteNonQuery());   
  18. }   
  19. catch (Exception)   
  20. {   
  21. return -1;   
  22. throw;   
  23. }   
  24. finally   
  25. {   
  26. conn.Close();   
  27. }   
  28. }   
  29. public void ReadPhoto(string url)   
  30. {   
  31. string sql = "select photo from Table1 where ID = ''0''";   
  32. SqlConnection conn = new SqlConnection();   
  33. conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";   
  34. SqlCommand cmd = new SqlCommand(sql, conn);   
  35. try   
  36. {   
  37. conn.Open();   
  38. SqlDataReader reader = cmd.ExecuteReader();//采用SqlDataReader的方法来读取数据   
  39. if (reader.Read())   
  40. {   
  41. byte[] photo = reader[0] as byte[];//将第0列的数据写入byte数组   
  42. FileStream fs = new FileStream(url,FileMode.CreateNew);创建FileStream对象,用于写入字节数据流   
  43. fs.Write(photo,0,photo.Length);//将byte数组中的数据写入fs   
  44. fs.Close();//关闭fs   
  45. }   
  46. reader.Close();//关闭reader   
  47. }   
  48. catch (Exception ex)   
  49. {   
  50. throw;   
  51. }   
  52. finally   
  53. {   
  54. conn.Close();   
  55. }   
  56. }   
  57. }  

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号