asp.net中的记忆盲区
?<1>? 連接數據庫? 用read方法取出數據?? 在web.config取出連接字符串???
??????? string sqlconn = ConfigurationManager.ConnectionStrings["db_showHouseConnectionString"].ToString();
??????? SqlConnection?? conn=new SqlConnection (sqlconn );
??????? SqlCommand com = new SqlCommand("select? *?? from? film", conn);
??????? conn.Open();
??????? SqlDataReader sql = com.ExecuteReader(CommandBehavior.CloseConnection);//當讀取完畢數據時同時關閉數據庫連接
??????? GridView1.DataSource = sql;
??????? GridView1.DataBind();
? <2>?? GridView中有一個屬性能夠實現局部刷新?? EnableSortingAndPagingCallbacks="True"
? <3>?? ctrl+shift+a為添加新的一個頁面的快捷鍵
? <4>?? 在Cmd中添加參數時能夠可以根據數據類型自動添加相應的參數
??????????? com.Parameters.AddWithValue("name", Name);
???????????????? name為自己起的的名字
???????????????? Name為實參數
???????? 此處一般應用于存儲過程中的應用
? <5>比較好的數據庫記錄刪除方式
?????? protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
??????? {
??????????????? string sqlconn = ConfigurationManager.ConnectionStrings["db_showHouseConnectionString"].ToString();
??????????????? SqlConnection conn = new SqlConnection(sqlconn);
??????????????? SqlCommand com = new SqlCommand("select? *?? from? film", conn);
??????????????? SqlDataAdapter sda = new SqlDataAdapter(com);
??????????????? SqlCommandBuilder scmd = new SqlCommandBuilder(sda);//此句很重要
?????????????? //DataTable dt = new DataTable();
??????????????? DataSet sa = new DataSet();
??????????????? sda.Fill(sa, "dt2");
??????????????? sa.Tables["dt2"].DefaultView.Delete(e.RowIndex);?????
??????????????? int rows = sda.Update(sa, "dt2");
??????????????? Response.Write("成功");
??????????????
???? }
? <6>將數據集放入到catche中,,緩存的作用用來暫時存儲數據,減少與服務器的鏈接
????????? DataSet ds =(DataSet) Cache.Get("cache_Name");//在cache中取出數據集然后轉化使用
??????????? if (ds == null)
?????????? {
??????????? string sqlconn = ConfigurationManager.ConnectionStrings["db_showHouseConnectionString"].ToString();
??????????? SqlConnection conn = new SqlConnection(sqlconn);
??????????? SqlCommand com = new SqlCommand("select? *?? from? film", conn);
??????????? SqlDataAdapter sda = new SqlDataAdapter(com);
??????????? DataSet sa = new DataSet();
??????????? sda.Fill(sa, "dt");
??????????? //*??? 將dataset放入到頁面緩存中去,以便能及時的取出信息,增加客戶瀏覽的速度??? */
??????????? sa.ExtendedProperties.Add("dt2_name", DateTime.Now.ToLongTimeString());
??????????? Cache.Insert("cache_Name", sa, null, DateTime.Now.AddMinutes(2), TimeSpan.Zero);
??????????? //____________________________________________________________________________________*//
????????????? GridView1.DataSource = sa.Tables["dt"].DefaultView;
????????????? GridView1.DataBind();
????????? }
??? Cache.Remove("cache_Name");//將數據集從緩存中移除掉
? <7>? 標記出當前網站所在的目錄 Response.Write(Server .MapPath ("."));
? <8>? 所有的文件在計算機中都能將其轉化成二進制的格式的流媒體,將其存入到數據庫中或者將其存入到xml中的文件中,,應用的時候可以將其在讀取出來,然后轉化成相應的文件
??? ///<summary>
??? /// 將文件轉化成二進制的字符串
??? ///</summary>
??? ///<param name="Path">文件存儲的路徑</param>
??? ///<returns></returns>
??? public static string Create_File_Tobit(string Path)
??? {
??????? FileStream Fs = new FileStream(Path, FileMode.Open, FileAccess.Read);
??????? //創建fs實例讀取數據流
??????? int Lenth = Convert.ToInt32(Fs.Length);
??????? //得到數據的大小
??????? Byte[] liu = new byte[Lenth];
??????? //創建一個內存緩存區
??????? BinaryReader BR = new BinaryReader(Fs);
??????? //申請一個BR用了完成數據流二進制的轉化
???????
??????????? BR.Read(liu, 0, Lenth);
??????
??????? string Data_liu = Convert.ToBase64String(liu);
??????? BR.Close();
??????? Fs.Close();
??????? return Data_liu;
??? }
??? ///<summary>
??? /// 將二進制文件存為文件
??? ///</summary>
??? ///<param name="Path">存入文件的路徑</param>
??? ///<param name="Shu_Ju">二進制格式文件字符</param>
??? public static void bit_To_File(string Path, string Shu_Ju)
??? {
??????? FileStream Fs = new FileStream(Path, FileMode.Create, FileAccess.Write);//此為創建一個fileStream實例,格式為創建,寫入
??????? BinaryWriter BW = new BinaryWriter(Fs);//二進制文件寫入實例
??????? BW.Write(Convert.FromBase64String(Shu_Ju));//將二進制格式的流媒體寫入文件
??????? BW.Close();
??????? Fs.Close();
??? }
??? 以上兩個方法中,方法1實現的是將傳入的路徑中的文件讀取成二進制流媒體,然后轉化成相應的字符串。
??? 方法2實現的是將傳入的二進制的格式的文件存入到傳來的地址中,引用為:
??????? string a = Du_Bite.Create_File_Tobit(Server.MapPath("qq.jpg"));//將已有的圖片的文件讀出為二進制文件
??????? Du_Bite.bit_To_File(Server.MapPath("ddd.jpg"), a);//將二進制的文件存入到文件中命名為ddd.jpg
?? <9>將圖片文件存入到數據庫中,然后讀取出來
?????? 1、數據庫定義
???????????????????????? 三個字段 id?? int??? ; gid? uniqueidentifier?? ;img??? image?? ;表名為xml
??????????????????????? uniqueidentifier:為數據類型,全球唯一標識,一般接受guid定義的類型
??????????????????????? image:為圖片的類型
?????? 2、頁面中放一個上傳文件的控件,用來上傳圖片
?????? 3、存入數據庫的代碼如下:
???????? if (FileUpload1.HasFile)
????????? {
??????????? Guid gid = Guid.NewGuid();? //此句為表示出全球唯一的標識代碼編號,,據稱為全球不會重復
??????????? string sqlconn = ConfigurationManager.ConnectionStrings["db_showHouseConnectionString"].ToString();
??????????? SqlConnection conn = new SqlConnection(sqlconn);
??????????? SqlCommand com = new SqlCommand("INSERT INTO Xml (guid, img) VALUES (@guid,@img)", conn);
??????????? com.Parameters.Add("@guid", SqlDbType.UniqueIdentifier).Value = gid;
??????????? com.Parameters.Add("@img", SqlDbType.Image).Value = FileUpload1.FileBytes;?? //將上傳的文件轉換成流媒體,,然后放入到數據庫img中。。。。。。此處只能用這種方法存入數據
??????????? conn.Open();
??????????? com.ExecuteNonQuery();
??????????? conn.Close();
??????????? Session["gid"] = gid;
??????????? Response.Write("成功");
???????? }
??????? else
??????? {
??????????? Response.Write("請上傳文件!");
??????? }
????? 4、將圖片文件從數據庫中取出,,然后寫入到界面中
??????? string sqlconn = ConfigurationManager.ConnectionStrings["db_showHouseConnectionString"].ToString();
??????? SqlConnection conn = new SqlConnection(sqlconn);
??????? SqlCommand com = new SqlCommand("select img? from? xml? where? guid='"+Session ["gid"].ToString ()+"'", conn);
??????? conn.Open();
??????? byte[] liu = (byte[])com.ExecuteScalar();?? //將流媒體讀出然后存入到計算機緩存中
??????? conn.Close();
??????? Response.OutputStream.Write(liu, 0, liu.Length);??? //將流媒體寫入到頁面中,,,記住這種方法
??????? Response.End();??? //讀取結束
《9》 下面這個實例是將圖片的文件寫入到xml文件中。。。此處是一個難點,要牢牢記住
??? <1> 這個函數實現xml文件的創建以及寫入
?????????????? 這個函數是通過的方法調用
???????????????????????????????????????????????????? string Xml_Path = Server.MapPath("~/App_Data/img.xml");
???????????????????????????????????????????????????? Guid gid = Guid.NewGuid();
???????????????????????????????????????????????????? Session["gid"] = gid.ToString();
???????????????????????????????????????????????????? Bite_To_Xml.File_To_Xml(FileUpload1, Xml_Path, gid.ToString ());
???????????????????????????????????????????????????? Response.Write(gid.ToString() + "img.xml?? 已經成功創建");
?????????? public static void File_To_Xml(FileUpload fu, string Xml_Path, string Gid)
????????????? {??? //fu為調用此函數的一個上傳控件?? Xml_Path 這個是要保存的xml文件的地址? Gid? 是要保存的編號
???????????????? if (fu.HasFile)
????????????????????? {
?????????????????????????????? string File_Path = fu.FileName.ToString();
?????????????????????????????? int File_Lenth = fu.PostedFile.ContentLength;?? //得到上傳圖片的大小
?????????????????????????????? try
??????????????????????????????????? {
???????????????????????????????????????? Byte[] bit_Array = new byte[File_Lenth];
???????????????????????????????????????? Stream streamobj = fu.PostedFile.InputStream;//將上傳的文件轉化成流媒體
???????????????????????????????????????????????? streamobj.Read(bit_Array, 0, File_Lenth);//將文件寫入到內存中
???????????????????????????????????????? /* 以下是建立新的xml文件 ,以方便將流媒體存入到xml文件中? */
??????????????????????????????????????? XmlDocument xdom = new XmlDocument();
??????????????????????????????????????? //聲明一個xml文件
?????????????????????????????? if (!File.Exists(Xml_Path))
??????????????????????????????????? {//判斷文件是否存在,如果不存在的時候將新建一個xml文件
???????????????????????????????????????? XmlDeclaration sml_Title = xdom.CreateXmlDeclaration("1.0", "utf-8", null);
???????????????????????????????????????? xdom.AppendChild(sml_Title);
??????????????????????????????????? //創建一行文檔的表頭聲明
??????????????????????????????????? XmlElement Root = xdom.CreateElement("File");
??????????????????????????????????? xdom.AppendChild(Root);
??????????????????????????????????? //創建根節點????????????????? 這地方要記住的是每一個子節點都傳承與父節點之下,,就是說當這個節點是上面一個節點的子節點的時候就必須使用上一個? //節點的實例創建例如:? xdom.AppendChild(Root);;——————》 Root.AppendChild(Rootlement);
??????????????????????????????????? XmlElement Rootlement = xdom.CreateElement("Image");
??????????????????????????????????? Root.AppendChild(Rootlement);
??????????????????????????????????? //創建父節點
??????????????????????????????????? XmlElement ChildElement = xdom.CreateElement("Guid");
??????????????????????????????????? ChildElement.InnerText = Gid;
??????????????????????????????????? Rootlement.AppendChild(ChildElement);
??????????????????????????????????? //將guid傳來的值存入xml的子節點
??????????????????????????????????? XmlElement ChildElement2 = xdom.CreateElement("Size");
??????????????????????????????????? ChildElement2.InnerText = File_Lenth.ToString();
??????????????????????????????????? Rootlement.AppendChild(ChildElement2);
??????????????????????????????????? //將文件的大小存入xml文件中
??????????????????????????????????? XmlElement ChildElementimgDate = xdom.CreateElement("imgDate");
??????????????????????????????????? ChildElementimgDate.InnerText = Convert.ToBase64String(bit_Array);? //將媒體流轉化成字符寫入到xml中
??????????????????????????????????? Rootlement.AppendChild(ChildElementimgDate);
?????????????????
??????????????????????????????????? //將流媒體寫入到xml文件中
??????????????????????????????????? xdom.Save(Xml_Path);
??????????????????????????????????? }
????????????????????????????? else
??????????????????????????????????? {
??????????????????????????????????????? xdom.Load(Xml_Path);
?????????????????????????????????????? //讀取xml文件到xdom中
?????????????????????????????????????? XmlNode root = xdom.SelectSingleNode("File");
?????????????????????????????????????? //讀取到xml中相應的節點,然后標志處此行來
?????????????????????????????????????? XmlElement Rootelement = xdom.CreateElement("Image");
?????????????????????????????????????? root.AppendChild(Rootelement);
?????????????????????????????????????? //創建父節點
?????????????????????????????????????? XmlElement ChildElement = xdom.CreateElement("Guid");
?????????????????????????????????????? ChildElement.InnerText = Gid;
?????????????????????????????????????? Rootelement.AppendChild(ChildElement);
?????????????????????????????????????? //將guid傳來的值存入xml的子節點
?????????????????????????????????????? XmlElement ChildElement2 = xdom.CreateElement("Size");
?????????????????????????????????????? ChildElement2.InnerText = File_Lenth.ToString();
?????????????????????????????????????? Rootelement.AppendChild(ChildElement2);
?????????????????????????????????????? //將文件的大小存入xml文件中
?????????????????????????????????????? XmlElement ChildElementimgDate = xdom.CreateElement("imgDate");
?????????????????????????????????????? ChildElementimgDate.InnerText = Convert.ToBase64String(bit_Array);
?????????????????????????????????????? Rootelement.AppendChild(ChildElementimgDate);
????????????????????????????????????? //將流媒體寫入到xml文件中
????????????????????????????????????? xdom.Save(Xml_Path);
?????????????????????????????????? }
????????????????????????? }
???????????????????????? catch (Exception oe)
???????????????????????? {
???????????????????????????? throw (oe);
???????????????????????? }
??????????????????? }
????????????? }
???? <2> 下面這個函數實現xml文件的讀取工作,從xml文件中讀取出來。。然后寫入到頁面中
??????????????????????? protected void Button4_Click(object sender, EventArgs e)
??????????????????????? {
???????????????????????????????? XmlDocument Xml = new XmlDocument();
???????????????????????????????? Xml.Load(Server.MapPath("App_Data/img.xml"));//此處為新實例化的一個xml文件
???????????????????????????????? XmlNodeList XNL = Xml.SelectSingleNode("//Image[Guid='" + Session["gid"].ToString () + "']").ChildNodes;? //將xml文件讀取出來標志此節點以下的所有的節點集合賦值給XNL
???????????????????????????????? for(int i=0;i<XNL .Count ;i++)
???????????????????????????????? {
????????????????????????????????????????? string?? imgdata=XNL.Item (2).InnerText ;
????????????????????????????????????????? Response.OutputStream.Write(Convert.FromBase64String(imgdata), 0, imgdata.Length);? //將文件流寫入到頁面中
????????????????????????????????????????? Response.End();? //結束文件的寫入工作
???????????????????????????????? }
???????????????????????? }
《10》 怎樣將圖片的二進制媒體流,在頁面中顯示圖片的同時保證控制的圖片的大小的控制
??????????????? 1. 添加一個新的aspx 命名 為 image.aspx;
??????????????? 2. 在image.aspx里 的 page_load里 寫這句話:Response.BinaWrite(byte[]buffer); 輸出buffer中的二進制圖像流,將圖片顯示到這個頁面中。
??????????????? 3. 然后把你的image控件的? Imageurl? = "image.aspx";
????????????????? 最終 你的 image控件 就 能顯示 二進制流圖像了。
??????????????? 在image.aspx中顯示的圖片,在別的頁面中調用此頁面就可以。
轉載于:https://www.cnblogs.com/zuoguanglin/archive/2012/03/20/2408946.html
總結
以上是生活随笔為你收集整理的asp.net中的记忆盲区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataGridView显示数据库数据(
- 下一篇: Objectice-C之类层次结构