Visual Studio.Net 2005中用SqlDataSource處理數據庫特殊數據類型

      在Sql Server 2005中有哪些常用的數據類型呢?我想這些常用的數據類型應該是:char、nchar、varchar、nvarchar、text、ntext、int、float、money、bit、datetime、smalldatetime、image、binary、varbinary,還有些是在特定環境下需要的如xml、bigint、numberic、real、smallint、timestamp、tinyint等等其他一些更少用到的數據類型。這麼多的數據類型,對開發人員來說最常使用的當然是存儲字符串的數據類型了,他們有:char、nchar、varchar、nvarchar、text、ntext,那剩下來的自然就是這次隨筆所說的“特殊數據類型”了。

      這些特殊數據類型包括:int、float、money、bit、datetime、smalldatetime、image、binary、varbinary、xml、bigint、numberic、real、smallint、timestamp、tinyint等其他沒有列出的數據類型,爲什麼說這些數據類型是特殊的呢?那主要相對於Visual Studio.Net 2005中的SqlDataSource而言的,在SqlDataSource中默認處理且不需要考慮和編寫代碼的就是處理存儲字符串的數據類型了,然而對於其他類型的則需要您或多或少的編寫代碼。我想這裏面最複雜的莫過於處理二進制的數據了,比如保存到數據庫的圖片,加密字符串(如:密碼)後的二進制等等,這兩種數據在數據庫中選擇的數據類型應該是image和varbinary。下面就着重講解一下如何保存這兩種數據類型。

      1、首先假設數據庫中已經存在一張表。其中數據字典如下表所示:

表名:T_GuestInfo(客戶信息) 

英文字段名

中文字段名

數據類型

長度

主外鍵

是否爲空

默認值

id

自動編號

int

4

主鍵

[自動]

guestname

客戶名稱

varchar

20

 

 

guestpsw

客戶密碼

varbinary

2000

 

 

gdatetime

註冊日期

datetime

8

 

getdate()

photo

客戶照片

image

 

 

表1   客戶信息表 

      這是一個簡單的數據庫表,但是已經有了期望有的數據類型。

      2、其次讓頁面中SqlDataSource能連接到T_GuestInfo所在的數據庫。

      3、設置SqlDataSource的InsertQuery爲【insert into T_GuestInfo values(@guestname,@guestpsw,@gdatetime,@photo)】。

      4、此時假設頁面上有了需要獲取這些Sql變量的控件值,並且有一個Button,其屬性ID是Btn1的按鈕,用來提交數據。Button的Click事件僞代碼如下所述:

 1    protected void Btn1_Click(object sender, EventArgs e)
 2    {
 3            SqlDataSource1.InsertParameters.Add("guestname", tbguestname.Text.Trim());
 4            SqlDataSource1.EnableCaching = false;
 5            int i = SqlDataSource1.Insert();
 6            if(i == 1
 7             {
 8               //提示用戶成功操作。
 9           }

10    }

 

      此時還有幾個參數沒有被賦值怎麼辦?不用着急,在發給數據庫前一定都讓這些參數有值!接着……

      5、繼續添加一個事件是SqlDataSource插入前的Inserting事件,即SqlDataSource1_Inserting。事件僞代碼如下:

 1    protected void SqlDataSource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)
 2    {
 3        byte[] bt1 = guestpswbytes;//guestpswbytes是字符串密碼轉換爲二進制數組後的值,需要您自己從相應控件中轉換,這裏沒有提供此代碼。
 4        byte[] bt2 = photobytes;//photobytes同樣需要您自己去寫代碼轉換爲二進制數組。
 5        System.Data.SqlClient.SqlParameter guestpswdb= new System.Data.SqlClient.SqlParameter("@guestpsw", System.Data.SqlDbType.VarBinary);
 6        guestpswdb.Value = bt1;
 7        e.Command.Parameters.Add(guestpswdb);
 8        System.Data.SqlClient.SqlParameter photodb = new System.Data.SqlClient.SqlParameter("@photo", System.Data.SqlDbType.Image);
 9        photodb.Value = bt2;
10        e.Command.Parameters.Add(photodb);
11        System.Data.SqlClient.SqlParameter gdatetimedb = new System.Data.SqlClient.SqlParameter("@gdatetime", System.Data.SqlDbType.DateTime);
12        gdatetimedb .Value = DateTime.Now;
13        e.Command.Parameters.Add(gdatetimedb);
14    }

 

      此時按F5運行程序,插入數據,SqlDataSource就能很好的插入我們期望插入的數據了。當然在SqlDataSource_Inserting事件中您還可以寫入各種數據庫的數據類型,除了SqlDataSource_Inserting事件外,在SqlDataSource_Updating、SqlDataSource_Selecting和SqlDataSource_Deleting事件中同樣如此。

      這樣我們就完成了讓Visual Studio.Net 2005中SqlDataSource插入、更新、查詢和刪除數據庫特殊數據類型的任務了。

 

附錄:

      在完成本隨筆前,本人尋找和拜讀了一些與此相關的網絡作品,其中本隨筆就是以 http://wangjierui.blog.51cto.com/186879/109595 文章爲雛形的,作者:王傑瑞

      還有一篇文章似乎網絡傳抄的非常氾濫(真是網絡文章一大抄,而且所有抄寫的人都不說明轉載地址和作者,包括博客園的一位博友,還以爲此文出自博客園呢),因此本以爲找不到文章出處了,幸好文中有圖片,圖片均帶有水印,最終找到了原文地址:http://dev.yesky.com/msdn/263/3034763.shtml 作者:朱先忠,網站:天極網 (根據發佈日期等條件判斷應該是原創地址了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章