有時候為圖方便,會直接用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(); } } }
注:參考了園子里某位朋友的博客。