新年第一個項目---思考

柳樹基金助學網是我2009年第一個網站項目,總共花了20多來天。

柳樹基金助學網使用的是winsonhttp://www.cnblogs.com/winsonet/)開發的開發框架,在此我要感謝winson。在開發中使用了CodeSmith代碼生成工具,方便快速的生成了高質量的數據模型對象代碼。

 

下面是我開發柳樹基金助學網的一些心得,還請各位大俠看過之後多多指教。

我先說的是CodeSmith代碼生成工具裏的一個不足。

CodeSmith生成的BaseOP類中有一個GetPrimeKey獲取主鍵的方法,該方法中有一段獲取主鍵的SQL語句:

 

Code
  string cSQL = "select rtrim(b.name) as colname from sysobjects a,syscolumns b " +
                
"left outer join sysproperties c on b.id = c.id and b.colid =  c.smallid " +
                
"left outer join syscomments e on b.cdefault = e.id " +
                
"left outer join (select g.id,g.colid from sysindexes f,sysindexkeys g " +
                
"where f.id = g.id and f.indid = g.indid and f.indid > 0 and " +
               
"f.indid < 255 and (f.status & 2048)<>0) h on b.id = h.id " +
              
"and b.colid = h.colid where a.id = b.id and a.status>0 and h.id is not null and  a.name='" + _tableName + "'";

 

 

這段SQL語句經過測試存在BUG,它不能在SQL2005,SQL2000上運行,至於MYSQL和甲骨文數據我就沒有測試過,哪位有條件的可以幫我測測。主鍵如果無法獲取,那沒數據操作模型就無法運行起來。

 

還有一點不足之處是,每次其生成的SQL語句都是根據該表的模型來生成的,二模型裏的字段又是根據數據庫表結構來生成的,這就造成了在每次執行INSERT語句時,它都會有一個ID字段,而ID字段往往都是被設置爲主鍵,自動增長類型的,這樣在INSERT時就會出現錯誤,我目前還不知道怎樣設置才能時它在INSERT時沒有ID字段,而其他的操作有ID字段,目前在柳樹基金助學網裏的解決方案是把主鍵ID字段的自動增長屬性去掉,然後在每次INSERT的時候都去查一下ID的最大值,然後在加1賦值給INSERT語句裏ID字段。當然,CodeSmith生成的代碼非常優秀,它以對象的形式讓我們來操作數據庫,這操作有點像HIBERNATE

winsonWinson.Framework 3.0框架中我發現他的SqlPager分頁控件好像有點問題,運行程序的時候,有時會出現找不到數據字段的BUG,調試了一下也沒能找出錯誤出在哪裏,呵呵,真不中用。Winson.Framework 3.0裏有一個Dialog對話框,像QQ彈出框的那種效果,我很喜歡,他把它封裝成了一個Dialog對象,每次使用的時候就調用這個對象,不過我卻沒能調出來,真失敗。winsonWinson.Framework 3.0框架做得的確不錯,它可以支持SQLACCESSMYSQL幾種數據庫,你只需在web.config裏做一個簡單的配置就能選擇你所開發的數據庫,而後臺代碼完全不用改動。

在最開始的時候我使用的是ACCESS2007數據庫,但是ACCESS2007好像不是很穩定,經常會出現連接不上數據庫的錯誤,訪問用戶一但多一點,程序就無法連接上數據庫了,不知道各位大俠是如何處理這個問題的?

 在一開始我是使用的jQuery來處理AJAX請求的,但是在出來一些HTML代碼時候,jQuery就不行了,因爲他無法處理像”&nbsp;”之類的HTML代碼的請求,之後改成了Ajax.dll來處理AJAX請求,它不會因爲存在“&”符號而發送錯誤請求,使用它需要做一些配置,首先是在web.config裏的 <httpHandlers>添加一個子節點:

    <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/>

然後在類的Page_Load方法裏在 if (!IsPostBack){}之前添加一段 

Ajax.Utility.RegisterTypeForAjax(typeof(類名)); 使用它不用導入任何空間

然後在你要調用的方法錢加上 [Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.ReadWrite)]代碼段


 

Code
 public partial class Test: System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            Ajax.Utility.RegisterTypeForAjax(
typeof(Test));
            
if (!IsPostBack){}
        }
       
        
//Ajax調用方法
       [Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.ReadWrite)]
        
public string Save(string ID,string msg)
        {}
   }

 

前臺調用代碼

Code
 <script type="text/javascript">
     
function Submit()
     {
         
var ID = 1;
         
var msg = "柳樹基金助學網";
         Test.Save(ID,msg,SubmitBack);
     }
     
function SubmitBack(data)
     {
        alert(data.value);
//彈出操作的結果
     }
 
</script >

 

 這樣就可以調用Test類裏的Save()方法,並傳遞兩個參數。當然,你必須在前天頁面加上      

  <form id="form1" runat="server"></form>標籤,不然就會出現一個找不到Test對象的錯誤。

 

上面這些就是柳樹基金助學網的一些心得,也沒有什麼厲害的技術,就是拿出來給大家分享分享,同時還希望各位多多支持我們的柳樹基金助學網,幫助更多的貧困學生,完他們一個讀書夢。

柳樹基金助學網:http://www.liushufund.com/Default.aspx
 

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