机房过程中,发现了很多高效的事情,如果一个事情,要做2遍以上,就要想办法抽象出来,提高自己的效率,不做无谓的ctrl+V 与ctrl+C!
sqlHelper就是一个很好的应用,下面我来细细分解~
What?是什么
SqlHelper是一个基于.NETFramework的数据库操作组件。组件中包含数据库操作方法。SqlHelper用于简化你重复的去写那些数据库连接SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。
SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。 -------百度百科
成员:
我的:
HOW?怎么做
1、配置项
在应用SqlHelper前最好使用web.config配置连接字符串,这样有利于网站的可移植性和代码的简洁。
<p style="margin:0in;font-family:Calibri;font-size:16.0pt" lang="en-US"> </p><p style="margin:0in;font-family:Calibri;font-size:16.0pt"><connectionStrings></p><p style="margin:0in;font-size:16.0pt"><span style="font-family:Calibri"><!--SqlServerHelper</span><span style="font-family:华文楷体">连接字符串设定</span><span style="font-family:Calibri">--></span></p><p style="margin:0in;font-family:Calibri;font-size:16.0pt"><span lang="zh-CN"><add</span><span lang="en-US"> </span><span lang="zh-CN">connectionString="server=.;uid=sa;pwd123456;database=yourdatabase"name="SqlServerHelper"/></span></p>
在我的机房里是这样写的:
<connectionStrings>
<addname="UI.My.MySettings.ChargeConnectionString"connectionString="Data Source=TXB;Initial Catalog=Charge;Persist SecurityInfo=True;User ID=sa;Password=1" providerName="System.Data.SqlClient"/>
其他数据库的连接字符串设定:
<!--Oracle连接字符串设定-->
<addconnectionString="Data Source=orcl;User Id=system;Password=***;IntegratedSecurity=no" name="OracleHelper"/>
<!--MySql连接字符串设定-->
<addconnectionString="server=localhost;uid=root;pwd=123456;database=mysqldatabase"name="MySqlHelper"/>
</connectionStrings>
<!--access连接字符串设定-->
<addconnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=F:\mdbFilePath\db.mdb;Jet OLEDB:Database Password=123"name="MySqlHelper"/>
</connectionStrings>
2、静态方式
静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果一个过程需要多个Sql语句执行时,得创建SqlConnection和控制他的传参,使语句复杂。或者就是每执行一个sql语句让SqlConnection创建一次,使性能受到影响。但是在只执行一个简单的查询语句时,显的更简单 。
//查询语句执行:
DataTabledt=SqlServerHelper.ReadTable("select * from table1");
//插入语句执行:
SqlServerHelper.ExecuteNonQuery("insertinto [students] values(@student_name,@class“),
SqlServerHelper.CreateInputParameter("@student_name",SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),
SqlServerHelper.CreateInputParameter("@class",SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)
);
我的代码:
Imports System.Data.SqlClient
Public Class SqlHelper
'利用配置文件寻找连接字符串,建立cmd文件
'定义变量,获得数据库连接字符串
'定义cmd命令
Private ReadOnly constr As String = System.Configuration.ConfigurationSettings.AppSettings("strConn")
Dim conn As New SqlConnection(constr)
Dim cmd As New SqlCommand
'一共是四个自定义的函数,但是只有两个方法名
'系统会自动根据参数的不同,是否有参数,决定调用哪一个方法
'就是方法的名字相同,但是参数不同
'cmdText——用来传递SQl语句
'cmdType——决定Command如何解释CommandText属性的内容默认取值为Text,即SQL语句
'sqlParameters——是CommandText属性所指定的SQL语句或存储过程的参数集合
'查询操作,带参数,返回结果是表
Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter()) As DataTable
'建立数据库连接
cmd = conn.CreateCommand()
'将该函数的三个参数,分别赋给相应的对象
'设置具体的sql语句
'设置解释CommandText的方式
'设置具体的执行参数
cmd.CommandText = cmdText
cmd.CommandType = cmdType
cmd.Parameters.AddRange(sqlparams)
'定义数据适配器变量,并实例化,将cmd绑定在adapter上面
'定义数据缓存变量
'定义变量返回数据表
Dim sqlAdapter As New SqlDataAdapter(cmd)
Dim ds As New DataSet
Dim dt As New DataTable
Try
'打开连接
'用adapter将dataset填充
'返回查询的结果,数据表
conn.Open()
sqlAdapter.Fill(ds)
dt = ds.Tables(0)
'捕获,并且抛出该异常
'Exception——系统抛出的异常
'ex——通过ex,显示该异常内容
Catch ex As Exception
'If ex.Message = "无法找到表 0。" Then
' Return Nothing
' Exit Try
'End If
MsgBox(ex.Message, , "数据库操作")
Finally
Call CloseConn(conn)
Call CloseCmd(cmd)
End Try
Return dt
End Function
'查询操作,不带参数,返回结果是表
Public Function GetDataTable(ByVal cmdText As String, ByVal cmdType As CommandType) As DataTable
cmd = conn.CreateCommand()
cmd.CommandText = cmdText
cmd.CommandType = cmdType
'定义数据适配器变量,并实例化,将cmd绑定在adapter上面
'定义数据缓存变量
Dim sqlAdapter As New SqlDataAdapter(cmd)
Dim ds As New DataSet
Dim dt As New DataTable
Try
conn.Open()
sqlAdapter.Fill(ds)
dt = ds.Tables(0)
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
Call CloseConn(conn)
Call CloseCmd(cmd)
End Try
Return dt
End Function
'增删改操作,带参数,没有返回结果
Public Function NoReturn(ByVal cmdText As String, ByVal cmdType As CommandType, ByVal sqlparams As SqlParameter())
cmd = conn.CreateCommand
cmd.CommandText = cmdText
cmd.CommandType = cmdType
cmd.Parameters.AddRange(sqlparams)
Dim i As Integer
Try
conn.Open()
i = cmd.ExecuteNonQuery()
If i > 0 Then
Return True
Else
Return False
End If
Catch ex As Exception
MsgBox(ex.Message)
'Catch
' MsgBox("该条数据已存在,请勿重复添加", , "温馨提示")
Finally
Call CloseConn(conn)
Call CloseCmd(cmd)
End Try
'Return True
End Function
'增删改操作,不带参数,没有返回结果
Public Function NoReturn(ByVal cmdText As String, ByVal cmdType As CommandType)
cmd = conn.CreateCommand
cmd.CommandText = cmdText
cmd.CommandType = cmdType
Try
conn.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
Call CloseConn(conn)
End Try
Return True
End Function
''' <summary>
''' 关闭连接
''' </summary>
'''<param name="conn ">需要关闭的连接</param>
'''<remarks>2015-3-29 17:22:31</remarks>
Public Sub CloseConn(ByVal conn As SqlConnection)
If (conn.State <> ConnectionState.Closed) Then '如果没有关闭
conn.Close() '关闭连接
conn = Nothing '不指向原对象
End If
End Sub
''' <summary>
''' 关闭命令
''' </summary>
'''<param name="cmd ">需要关闭的命令 </param>
'''<remarks>2015-3-29 17:22:31</remarks>
Public Sub CloseCmd(ByVal cmd As SqlCommand)
If Not IsNothing(cmd) Then '如果cmd命令存在
cmd.Dispose() '销毁
cmd = Nothing
End If
End Sub
End Class
【总结】
当一件事情重复2遍的去做时,学会思考,如何高效率的去做。