程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> DotNetNuke自定義窗體模塊的數據結構(三)

DotNetNuke自定義窗體模塊的數據結構(三)

編輯:關於ASP.NET

在接觸國外的CMS等Open Source產品之前,老實說,我寫過的存儲過程,包括SQL Server的、Oracle的,加起來絕對不會超過5個,而且還基本上都是從網上抄襲的,主要是覺得太麻煩:嗯,是的,如果數據庫設計的不夠好,經常需要改動,比如加一個字段,修改一下字段類型的話,需要從數據表、存儲過程、調用等一路改上來,確實是挺麻煩的。不過習慣了之後,發現用存儲過程確實有它的好處,也被迫養成了對數據庫設計要每個字段都斟酌半天的習慣,所以,我們看到DotNetNuke有近乎上千個存儲過程(安裝了所有的附加模塊之後)。

我現在非常喜歡使用存儲過程的方式來操作數據庫——不過,誠如我們在《DotNetNuke自定義窗體模塊的數據結構(二)》中所說的那樣,由於我們修改了數據結構,所以,存儲過程在這裡使用是不太適合的。唉,好吧,我聲明:我所說的並不代表我的意思,我對我說的話不承擔任何責任

我們在(二)中重新把UDT的UserDefinedRows這張表(在我們的模塊中已經改名了)做了修改,如果是希望在列表上顯示的,或者是參與查詢的,我們都作為基本字段放在列表中;而其他的字段則作為擴展字段放在擴展表中,在用戶進行定義的時候,可以選擇是使用基本字段,還是擴展字段。當然,在這種情況之下,基本字段就不可能被“用完”,在某一個Form之中,我們可能只需要基本字段中的幾個而已,其他剩余的我們都不需要用到,簡而言之,也就是我們需要更新的字段是運行時決定的,而不是設計時決定的。而這個時候,如果我們在進行INSERT或者UPDATE操作的時候,是對所有的字段都操作一遍的話,不但是有點怪,而且也容易造成錯誤,比如,日期型、整數型等的字段,本來明明是沒有內容的,但是我們非要INSERT入內容,會出現錯誤,或者是不正確的初始數據,我們希望,沒有使用到的字段,就保留其為NULL就好了,不需要對該字段進行操作(大家可以插入空值或者是String.Empty試試,會覺得很頭疼)。

所以,我們需要在運行時生成SQL語句,我們把這個函數放在下面,供大家參考。

1 Public Overrides Function AddHashRow(ByVal field As Hashtable) As Integer
2 Dim sqlComm As SqlCommand = New SqlCommand()
3
4 Dim strSql As String = "INSERT INTO RedstartFormRow ("
5
6 Dim strField As String = ""
7 Dim strParm As String = ""
8
9 For Each dic As DictionaryEntry In field
10 If strField <> "" Then
11 strField = strField & ", "
12 End If
13 strField = strField & dic.Key.ToString()
14
15 If strParm <> "" Then
16 strParm = strParm & ", "
17 End If
18 strParm = strParm & "@" & dic.Key.ToString()
19
20 sqlComm.Parameters.Add(New SqlParameter("@" & dic.Key.ToString(), GetNull(dic.Value.ToString())))
21 Next
22 strSql = strSql & strField & ") VALUES (" & strParm & ")"
23
24 strSql = strSql & "; select SCOPE_IDENTITY()"
25
26 Dim sqlConn As New SqlConnection()
27 sqlConn.ConnectionString = ConnectionString
28 sqlConn.Open()
29 sqlComm.Connection = sqlConn
30
31 sqlComm.CommandText = strSql
32
33 Return CType(sqlComm.ExecuteScalar(), Integer)
34 End Function

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved