数据库查询总是很让人纠结,以前用的也不多,就是那么几个语句,来回倒,但是在学习的过程中发现,发现一个真理“搞不懂的问题,总是要牵绊你”,这就好比,“出来混,总是要换的”,以前的知识没有学踏实,现在必须补回来。
一、数据库连接。
很简单,不多说,只需要一下几步。
1、创建连接字符串——connectionstring。
2、生成Sqlconnection对象。
3、打开sqlconnction对象——(进行操作)
4、(操作完毕)——关闭sqlconnction对象
代码如下
'定义连接字符串 Dim strconn as string = "Data Source=xiaohong—pc; Initial Catalog=shujukumingcheng;user id=sa; password=mima" '定义连接对象 Dim conn As New SqlConnection(strconn) '打开连接 If (conn.State =ConnectionState.Closed) Then conn.Open() End If '关闭连接 conn.Close()
二、数据库查询
这里主要介绍非脱机数据库查询。
1、使用sqlcommand
(1)、创建SqlCommand对象——三种方式
A、直接New一个新的sqlcommand对象。
Dim cmd asnew sqlcommand()
Cmd.connection=conn
Cmd.commandtext=strsql
B、使用参数化构造函数
Dim cmd asnew sqlcommand(conn,strsql)
C、使用connection对象创建
Dim cmd=conn.createcommand()
Cmd.commandtext=strsql
总结:这里要说明的两点:数据库命令对象(sqlcommand)不是单独存在的,要依附于连接对象,
一定要设置sqlcommand的connection属性;有命令对象,执行就要设置commandtext,它执行内容,否则毫无意义。
(2)、使用Sqlcommand执行查询
A、执行返回行的查询
使用sqlcommand的executereader方法,返回一个sqldatareader对象,通过这个对象来检查查询的结果。
sqldatareader是一行一行读取数据库中的记录,且一次只读取一行数据。
使用:dim reader assqldatareader =cmd.executereader()
优点:执行速度快。
缺点:不可返回,读取下一行数据后,上一行数据就会消失。
注意:执行完后,关闭sqldatareader。
分析:虽然一次只可以读取一行记录,但是在数据库查询的时候,遇到返回结果集是多行记录的时候,如果不适用dataset或者datatable之类的方法时,我们也是可以使用reader的。这就需要我们每次在取出reader读取一行之后,使用变量取出reader中的数据,然后再读取数据库中的数据即可。
(博客详见)
代码如下:(sqlhelper中的一个查询方法)
Public Function ExecuteReader(strsql AsString, para As SqlParameter) As SqlDataReader '设置命令对象的连接 cmd.Connection = conn '设置命令对象的命令文本 cmd.CommandText = strsql '添加参数 cmd.Parameters.Add(para) '打开连接 If (conn.State =ConnectionState.Closed) Then conn.Open() End If '声明datareadr的对象,并执行 Dim reader As SqlDataReader =cmd.ExecuteReader() '关闭连接 reader.Close() conn.Close() Returnreader End Function
B、执行不返回结果集的查询
这种查询就是所谓的“增,删,改”操作查询。针对记录的操作有insert,update,delete等,针对表的操作有:create,alter,drop等。
这些操作的共同特点:不反悔任何行,如果使用sqldatareader就有点浪费,所以我们使用sqlcommand的ExecuteNonQuery方法,该方法执行操作,并且返回一个integer值——受影响的行数。
使用该方法我们可以通过返回值来判定操作是否执行成功。
代码如下:
'**************************************************** '</summary> 有参数的增,删,改的操作,返回布尔类型 '<paramname="sqlstr">增/删/改/语句 ' <paramname="arrayparas">参数数组</param> ' <returns></returns> '***************************************************** PublicFunction ExecuteAddDeleteUpdate(sqlstr As String, arryparas() As SqlParameter)As Boolean '初始化返回值 Dim flag As Boolean = False '设置cmd 对象连接对象 cmd.Connection = conn '设置cmd 对象的连接文本 cmd.CommandText = strsql Dim intindex As Integer '遍历数组添加到cmd对象参数表中 For intindex = 0 To arryparas.Length -1 cmd.Parameters.Add(arryparas(intindex)) Next '判断连接是否打开,若关闭,则打开 If conn.State =ConnectionState.Closed Then conn.Open() End If '执行结果大于0 ,则执行成功 flag = cmd.ExecuteNonQuery() > 0 '最后关闭数据库连接 If conn.State =ConnectionState.Open Then conn.Close() End If '返回值 Return flag End Function