新年第一个项目---思考

柳树基金助学网是我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
 

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