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();
        }
    }
}

注:參考了園子里某位朋友的博客。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM