• SqlParameter的作用与用法


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

     public static object ExecuteScalar(string sqlStr, params SqlParameter[] parameters)
            {
                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    conn.Open();
                    using (SqlCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sqlStr;
                        cmd.Parameters.AddRange(parameters);
                        return cmd.ExecuteScalar();
                    }
                }
            }
    

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

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

    一、Add方法

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

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

    二、AddRange方法

    SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@name", "Pudding"), new SqlParameter("@ID", "1") };
    cmd.Parameters.AddRange(paras);
    本人实际操作中无 cmd.Parameters.AddRange(paras) 因为在 ExecuteScalar方法中已经添加参数。
    显然,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();
            }
        }
    }

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

  • 相关阅读:
    Vue中调用另一个组件中自定义事件
    docker下安装MySQL
    docker下安装Redis
    .NET Core简介
    Object(Asp.NET核心机制内置对象汇总)
    .NET MVC5简介(六)HttpHandler
    .NET MVC5简介(五)管道处理模型IHttpModule
    hibernate有什么作用
    hibernate编写时没有提示
    触发器insert
  • 原文地址:https://www.cnblogs.com/jeib/p/4277824.html
Copyright © 2020-2023  润新知