当前位置:网站首页 > 软件教程 > 正文

SqlParameter的用法介绍

作者:admin发布时间:2021-11-02分类:软件教程浏览:评论:0


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

一般来说,在更新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();
}
以上编码未选用SqlParameter,除开存有安全系数难题,该方式 还没法处理二进制流的升级,如图片文件。根据应用SqlParameter能够处理以上难题,普遍的操作方法有二种,Add方式 和AddRange方式 。

一,Add方式

string sql = "update Table1 set name = @name where ID = @ID";

SqlParameter sp = new SqlParameter("@name", "Pudding");  //转化成一个名称为@name的主要参数,务必以@开始表明是加上的主要参数,并给其取值"Pudding"
cmd.Parameters.Add(sp); //把主要参数自变量加上到指令目标中去
sp = new SqlParameter("@ID", "1");
cmd.Parameters.Add(sp);
  该方式 每一次只有使用一个SqlParameter。以上编码的功用是将ID值就等于1的字段名name升级为Pudding(姓名)。

二,AddRange方式

?
1
2 SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@name", "Pudding"), new SqlParameter("@ID", "1") };
cmd.Parameters.AddRange(paras);
  显而易见,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();
        }
    }

标签:SqlParameter


欢迎 发表评论: