犬者
“说了你又不听,听又不懂,懂又不做,做又做错,错又不认,认又不改,改又不服,不服也不说,那叫我怎么办?!”

【电脑】一个不知道是不是很笨的MS SQL数据库连接类

我实在是有点自虐了……本来很简单的一个project……就是要做一个online shopping的网站而已……我却将其复杂若干倍……弄成一个portal……整个东西完全的模块化……还支持模板替换……带留言板之类的……哎……根本就是一个DotNetNuke的幼稚模仿版……要是做不完,也是我找苦吃……

老实说,我觉得……这个project已经比整个blogwind要复杂了……

一直都很讨厌写重复的代码……特别是与数据库有关的东西……总是反复的读取数据库连接字符串……打开数据库连接……声明新的数据命令……新dataadapter等等……

我暂时还没法向DotNetNuke一样去使用Factory Design Pattern……自己自作聪明的写了下面一个类conn:

imports System.Data.SqlClient
Public Class conn
    Private conn As SqlConnection
    Public cmd As SqlCommand
    Public Sub New()
        Dim configurationAppSettings As System.Configuration.AppSettingsReader = New System.Configuration.AppSettingsReader
        conn = New SqlConnection(CType(configurationAppSettings.GetValue("ConnectionString", GetType(System.String)), String))
        conn.Open()
    End Sub

    Public Function close()
        If conn.State = ConnectionState.Open Then
            conn.Close()
        End If
    End Function

    Public Function exe(ByVal sql As String)
        Dim cmd As New SqlCommand(sql, conn)
        cmd.ExecuteNonQuery()
        cmd.Dispose()
    End Function

    Public Function retrieve(ByVal sql As String, ByVal name As String) As DataTable
        Dim comm As SqlDataAdapter
        comm = New SqlDataAdapter(sql, conn)
        Dim ds As New DataTable
        comm.Fill(ds)
        comm.Dispose()
        Return ds
    End Function
    Public Function newcmd(ByVal sql As String)
        cmd = New SqlCommand(sql, conn)
        cmd.CommandType = CommandType.StoredProcedure
    End Function
End Class

这个类应该还是会慢慢的扩展……我知道有sqlhelper之类的东西……但是,一直没有心情去学习……不知道写这么个类是不是在重复sqlhelper的功能……

有了这个东西……我就在也不用在所有的页面里面重复跟数据库有关的东西了……连imports System.Data.SqlClient都不用……

全部一上来就 dim cn as New conn……

如果要执行NonQuery的sql命令……便cn.exe(sql)……

要获得一个表则dim dt as DataTable, 然后dt = cn.retrieve(sql, tablename)

要执行存储过程的话,则cn.newcmd(sp name),然后,便可以对cn.cmd添加各个parameters啥的……

我不敢说这样子很爽……但是……比起我一开始在写blogwind的时候,是舒服很多了……

我不知道有没有可能通过重写这个类来实现数据库通用……而不需要更改其它部分的程序……也许可以吧……至少我并没有在其他部分程序里面import SqlClient……使用的东西,也都是database independent的……

什么时候闲得发慌了……我就去写Access/mysql/oracle等的conn类……然后看看是否可以直接替换……嘿嘿……

3786
问天 @10/23/2004 1:53:11 AM
View blogs in this category:电脑


Wuvist 在 11/24/2005 10:11:03 PM 说:

反复的打开、关闭并不浪费……
因为数据库本身会有链接池做缓存……
反倒是整个工程共用一个conn可能造成一些性能瓶颈……
全部一上来就 dim cn as New conn……?????? 在 11/24/2005 10:05:06 PM 说:

今天看了sqlhelp的源码,发现也是重复打开conn,关闭conn的,整个工程公用一个conn,是很容易做到的事情。
全部一上来就 dim cn as New conn……?????? 在 11/24/2005 10:02:01 PM 说:

唉,一个工程可能出现好多conn,并且重复打开,关闭的,真是太浪费了。
Rex 在 10/23/2004 2:52:01 AM 说:

那倒也是...
Wuvist 在 10/23/2004 2:33:25 AM 说:

呵呵……其实……整个.Net Framework不就是一个微软帮我们写好的基类库么?
Rex 在 10/23/2004 2:07:38 AM 说:

我在想,程序员真的自己应该积累自己或是公司的基类...可以省下许多力气..不如开个公司专门帮人写基类的....

Please leave your comment here

 
  名字:
  主页:
  内容:
 

   


Navigation
Blogwind
犬者首页
Contact


个人档案


“说了你又不听,听又不懂,懂又不做,做又做错,错又不认,认又不改,改又不服,不服也不说,那叫我怎么办?!”



Categories
死结(27)
电脑(177)
心情(181)
天影(25)
乱弹(211)
博客(82)
音乐(18)
饕餮(30)
读书(20)
电影(28)
网摘(5)
希望(37)
汕头(10)
经济(8)
苹果(19)
跋涉(7)



Archive
2008年11月
2008年10月
2008年9月
2008年8月
2008年7月
2008年6月
2008年5月
2008年4月
2008年3月
2008年2月
2008年1月
2007年12月
2007年11月
2007年10月
2007年9月
2007年8月
2007年7月
2007年6月
2007年5月
2007年4月
2007年3月
2007年2月
2007年1月
2006年12月
2006年11月
2006年10月
2006年9月
2006年8月
2006年7月
2006年6月
2006年5月
2006年4月
2006年3月
2006年2月
2006年1月
2005年12月
2005年11月
2005年10月
2005年9月
2005年8月
2005年7月
2005年6月
2005年5月
2005年4月
2005年3月
2005年2月
2005年1月
2004年12月
2004年11月
2004年10月
2004年9月
2004年8月
2004年7月
2004年6月
2004年5月
2004年4月
2004年3月
2004年2月
2004年1月
2003年12月



My Links
5G
bloglines
时尚摄影师奇科的博客
颜如玉
最爱卫斯理

RSS 2.0

Username:
Password:
 Remember me