• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 详解C#中SqlParameter的作用与用法

详解C#中SqlParameter的作用与用法

作者:-且听风吟- 字体:[增加 减小] 来源:互联网 时间:2017-05-28

-且听风吟- 通过本文主要向大家介绍了c语言32关键字详解,c语言链表详解,c语言指针详解,c语言题库及详解答案,c语言关键字详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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

string sql
 = "update
 Table1 set name = 'Pudding' where ID = '1'";//未采用SqlParameter
SqlConnection
 conn = new SqlConnection();
conn.ConnectionString
 = "Data
 Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";//连接字符串与数据库有关
SqlCommand
 cmd = new SqlCommand(sql,
 conn);
try
{
  conn.Open();
  return(cmd.ExecuteNonQuery());
}
catch (Exception)
{
  return -1;
  throw;
}
finally
{
  conn.Close();
}
</div>

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

一、Add方法

SqlParameter
 sp = new SqlParameter("@name","Pudding");
cmd.Parameters.Add(sp);
sp
 = new SqlParameter("@ID","1");
cmd.Parameters.Add(sp);
</div>

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

二、AddRange方法

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

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

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

public int SavePhoto(string photourl)
{
  FileStream
 fs = new FileStream(photourl,
 FileMode.Open, FileAccess.Read);//创建FileStream对象,用于向BinaryReader写入字节数据流
  BinaryReader
 br = new BinaryReader(fs);//创建BinaryReader对象,用于写入下面的byte数组
  byte[]
 photo = br.ReadBytes((int)fs.Length);//新建byte数组,写入br中的数据
  br.Close();//记得要关闭br
  fs.Close();//还有fs
  string sql
 = "update
 Table1 set photo = @photo where ID = '0'";
  SqlConnection
 conn = new SqlConnection();
  conn.ConnectionString
 = "Data
 Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";
  SqlCommand
 cmd = new SqlCommand(sql,
 conn);
  SqlParameter
 sp = new SqlParameter("@photo",
 photo);
  cmd.Parameters.Add(sp);
  try
  {
    conn.Open();
    return (cmd.ExecuteNonQuery());
  }
  catch (Exception)
  {
    return -1;
    throw;
  }
  finally
  {
    conn.Close();
  }
}
 
public void ReadPhoto(string url)
  {
    string sql
 = "select
 photo from Table1 where ID = '0'";
    SqlConnection
 conn = new SqlConnection();
    conn.ConnectionString
 = "Data
 Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";
    SqlCommand
 cmd = new SqlCommand(sql,
 conn);
    try
    {
      conn.Open();
      SqlDataReader
 reader = cmd.ExecuteReader();//采用SqlDataReader的方法来读取数据
      if (reader.Read())
      {
        byte[]
 photo = reader[0] as byte[];//将第0列的数据写入byte数组
        FileStream
 fs = new FileStream(url,FileMode.CreateNew);创建FileStream对象,用于写入字节数据流
        fs.Write(photo,0,photo.Length);//将byte数组中的数据写入fs
        fs.Close();//关闭fs
      }
      reader.Close();//关闭reader
    }
    catch (Exception
 ex)
    {
      throw;
    }
    finally
    {
      conn.Close();
    }  }}
</div>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解C#中三个关键字params,Ref,out
  • 详解三种C#实现数组反转方式
  • 详解C# 利用反射根据类名创建类的实例对象
  • 详解C#用new和override来实现抽象类的重写区别
  • 详解C#把DataTable中数据一次插入数据库的方法
  • 详解c# 类的构造方法
  • 详解C#多线程之线程同步
  • 详解C#中 Thread,Task,Async/Await,IAsyncResult的那些事儿
  • 详解C#中的委托
  • 详解C#中的out和ref

相关文章

  • 2017-05-28C#中lock死锁实例教程
  • 2017-05-28C#中Json的简单处理方法
  • 2017-05-28C#简单的加密类实例
  • 2017-05-28C#语法相比其它语言比较独特的地方(二)
  • 2017-05-28C#实现判断一个时间点是否位于给定时间区间的方法
  • 2017-05-28详解C#的设计模式编程之抽象工厂模式的应用
  • 2017-05-28c# 匿名方法的小例子
  • 2017-05-28C#中 const 和 readonly 的不同
  • 2017-05-28C#中实现判断某个类是否实现了某个接口
  • 2017-05-28C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#算法之大牛生小牛的问题高效解决方法
    • C#中 paint()与Onpaint()的区别
    • c#图片处理之图片裁剪成不规则图形
    • 用C#把文件转换为XML的代码
    • 动态改变gridview列宽度函数分享
    • C#基础:Dispose()、Close()、Finalize()的区别详解
    • C#中的yield关键字的使用方法介绍
    • C#中winform使用相对路径读取文件的方法
    • C#键盘鼠标钩子实例
    • C#中String类常用方法汇总

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有