有时候为图方便,会直接用sqlhelper文件进行相关操作,会出现如下的类:

  1. public static object ExecuteScalar(string sqlStr, params SqlParameter[] parameters)
  2. {
  3. using (SqlConnection conn = new SqlConnection(connStr))
  4. {
  5. conn.Open();
  6. using (SqlCommand cmd = conn.CreateCommand())
  7. {
  8. cmd.CommandText = sqlStr;
  9. cmd.Parameters.AddRange(parameters);
  10. return cmd.ExecuteScalar();
  11. }
  12. }
  13. }

  以前都是把  params SqlParameter[] parameters  修改后操作,发现有时候不方便。还是人家原来的好,比较灵活。

调用方法一般有如下两种:

一、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);
本人实际操作中无 cmd.Parameters.AddRange(paras) 因为在 ExecuteScalar方法中已经添加参数。
显然,Add方法在添加多个SqlParameter时不方便,此时,可以采用AddRange方法。
  下面是通过SqlParameter向数据库存储及读取图片的代码。
  1. 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.  
  30. public void ReadPhoto(string url)
  31. {
  32. string sql = "select photo from Table1 where ID = '0'";
  33. SqlConnection conn = new SqlConnection();
  34. conn.ConnectionString = "Data Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";
  35. SqlCommand cmd = new SqlCommand(sql, conn);
  36. try
  37. {
  38. conn.Open();
  39. SqlDataReader reader = cmd.ExecuteReader();//采用SqlDataReader的方法来读取数据
  40. if (reader.Read())
  41. {
  42. byte[] photo = reader[0] as byte[];//将第0列的数据写入byte数组
  43. FileStream fs = new FileStream(url,FileMode.CreateNew);创建FileStream对象,用于写入字节数据流
  44. fs.Write(photo,0,photo.Length);//将byte数组中的数据写入fs
  45. fs.Close();//关闭fs
  46. }
  47. reader.Close();//关闭reader
  48. }
  49. catch (Exception ex)
  50. {
  51. throw;
  52. }
  53. finally
  54. {
  55. conn.Close();
  56. }
  57. }
  58. }

注:参考了园子里某位朋友的博客。

SqlParameter的作用与用法的更多相关文章

  1. serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法

    ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...

  2. Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...

  3. Linq中关键字的作用及用法

    Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...

  4. JSP九大内置对象的作用和用法总结?

    JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...

  5. (转载)MySQL数据类型中DECIMAL的作用和用法

    (转载)http://database.51cto.com/art/201005/201651.htm 在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都 ...

  6. PreTranslateMessage作用和用法

    PreTranslateMessage作用和用法  PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗体的消息都要通过这里,比較经常使用, ...

  7. ViewHolder的作用和用法

    一直都看别人用ViewHolder,自己也用过,却不知道它的作用是什么?但知道肯定很有用,而且现在android studio应该有直接生产Viewholder的插件, 不过博主我是个新手,就没尝试去 ...

  8. Oracle分析函数及常用函数: over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. sum() over( partition by column1 order by column2 )主要用来对某个字 ...

  9. og标签对SEO的作用及用法

    meta property=og标签对SEO的作用及用法,如果你仔细观察会发现本站点<head>代码中有一段:"property="og:image"这段代码 ...

  10. PHP strip_tags() 函数的作用和用法

    strip_tags()函数可以轻松实现从字符串中去除 HTML 和 PHP 标记. 使用方法: trip_tags ( string $str [, string $allowable_tags ] ...

随机推荐

  1. 最大公约数与最小公倍数_c/c++

    gcd:greatest common divisor,最大公约数   欧几里得算法,也就是辗转相除法.公式:gcd(a, b) = gcd(b, a % b)   推论:gcd(b, a) == g ...

  2. 数据库结构差异比较-SqlServer

    /****** Object: StoredProcedure [dbo].[p_comparestructure_2005] Script Date: 2022/10/8 10:00:20 **** ...

  3. 2022安洵杯pwn-babyarm

    首先就是绕过一个简单的变表base64的加密key 然后就是一个类似ret2libc的利用方式,不过没有直接控制r0的gadget 使用的是arm32中万能的gadget from pwn impor ...

  4. 程序猿、IT男、屌丝

    一个学计算机的,做了金融圈的朋友,对另外做硬件的朋友,如是说: [据说你写的程序代码,必须很浪的计算机才能运行] [ 以后还用写程序吗.不是ChatGPT直接可以出源代码吗?] 程序猿.IT男.屌丝. ...

  5. 韦东山005_ARM裸机1期加强版

    005_ARM裸机1期加强版(又叫新1期,151节,23节免费,已完结)\新1期视频(151节,23节免费) 第006课开发板熟悉与体验(6节,免费) 第001节_开发板部件介绍与串口连接(免费) 如 ...

  6. OSI七层模型、TCP协议

    1. 网络资产搜索引擎 2. 网站存储用户密码进行MD5加密 3. 小型Web管理系统账号密码使用base64进行加密 4. IP地址:网络位+主机位 5. 局域网中没有DHCP服务主机获取的地址范围 ...

  7. pragma pack(字节对齐用法)---C语言

    #pragma pack(4) typedef struct { char buf[3]; word a; }kk; #pragma pack() 对齐的原则是min(sizeof(word ),4) ...

  8. Java笔记第十二弹

    Lambda表达式的标准格式 三要素:形式参数.箭头.代码块 格式:(形式参数)->(代码块) 形式参数:如果有多个参数,参数之间用逗号隔开:如果没有参数,留空即可 ->代表指向动作 La ...

  9. 树状分级框架UI实例

    树状分级框架UI实例:(内容参考https://zhuanlan.zhihu.com/p/108485875) #coding:utf8 #!/usr/bin/env python #@author: ...

  10. Asp-Net-Core开发笔记:使用RateLimit中间件实现接口限流

    前言 最近一直在忙(2月份沉迷steam,3月开始工作各种忙),好久没更新博客了,不过也积累了一些,忙里偷闲记录一下. 这个需求是这样的,我之前做了个工单系统,现在要对登录.注册.发起工单这些功能做限 ...