vb执行sql脚本
‘壹’ VB中如何运行sql语句
sql中有一个过程文件??
我孤陋寡闻,没听说过。。。
是不是存储过程?
以下是vb访问存储过程的代码,从网上过来的。。。
Option Explicit
Dim mConn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim rs2 As ADODB.Recordset
Dim rs3 As ADODB.Recordset
Dim rs4 As ADODB.Recordset
Dim cmd As ADODB.Command
Dim param As ADODB.Parameter
' 这里用第一种方法使用存储过程添加数据
Private Sub Command1_Click()
Set cmd = New ADODB.Command
Set rs1 = New ADODB.Recordset
cmd.ActiveConnection = mConn
cmd.CommandText = "insert_users"
cmd.CommandType = adCmdStoredProc
Set param = cmd.CreateParameter("truename", adChar, adParamInput, 20, Trim(txttruename.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("regname", adChar, adParamInput, 20, Trim(txtregname.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("pwd", adChar, adParamInput, 20, Trim(txtpwd.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("sex", adChar, adParamInput, 20, Trim(txtsex.Text))
cmd.Parameters.Append param
Set param = cmd.CreateParameter("email", adChar, adParamInput, 20, Trim(txtemail.Text))
cmd.Parameters.Append param
‘ 下面的类型需要注意,如果不使用 adSingle, 会发生一个精度无效的错误
Set param = cmd.CreateParameter("jifen", adSingle, adParamInput, 50, Val(txtjifen.Text))
cmd.Parameters.Append param
Set rs1 = cmd.Execute
Set cmd = Nothing
Set rs1 = Nothing
End Sub
' 这里用第二种方法使用存储过程添加数据
Private Sub Command2_Click()
Set rs2 = New ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = mConn
cmd.CommandText = "insert_users"
cmd.CommandType = adCmdStoredProc
cmd.Parameters("@truename") = Trim(txttruename.Text)
cmd.Parameters("@regname") = Trim(txtregname.Text)
cmd.Parameters("@pwd") = Trim(txtpwd.Text)
cmd.Parameters("@sex") = Trim(txtsex.Text)
cmd.Parameters("@email") = Trim(txtemail.Text)
cmd.Parameters("@jifen") = Val(txtjifen.Text)
Set rs2 = cmd.Execute
Set cmd = Nothing
Set rs1 = Nothing
End Sub
' 这里用第三种方法使用连接对象来插入数据
Private Sub Command4_Click()
Dim strsql As String
strsql = "insert_users '" & Trim(txttruename.Text) & "','" & Trim(txtregname.Text) & "','" & Trim(txtpwd.Text) & "','" & Trim(txtsex.Text) & "','" & Trim(txtemail.Text) & "','" & Val(txtjifen.Text) & "'"
Set rs3 = New ADODB.Recordset
Set rs3 = mConn.Execute(strsql)
Set rs3 = Nothing
End Sub
' 利用存储过程显示数据
‘ 要处理多种参数,输入参数,输出参数以及一个直接返回值
Private Sub Command3_Click()
Set rs4 = New ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = mConn
cmd.CommandText = "select_users"
cmd.CommandType = adCmdStoredProc
' 返回值
Set param = cmd.CreateParameter("RetVal", adInteger, adParamReturnValue, 4)
cmd.Parameters.Append param
' 输入参数
Set param = cmd.CreateParameter("regname", adChar, adParamInput, 20, Trim(txtregname.Text))
cmd.Parameters.Append param
' 输出参数
Set param = cmd.CreateParameter("numrows", adInteger, adParamOutput)
cmd.Parameters.Append param
Set rs4 = cmd.Execute()
If cmd.Parameters("RetVal").Value = 1 Then
MsgBox cmd.Parameters("numrows").Value
Else
MsgBox " 没有记录 "
End If
MsgBox rs4.RecordCount
Set DataGrid1.DataSource = rs4
DataGrid1.Refresh
End Sub
' 连接数据库
Private Sub Form_Load()
Set mConn = New Connection
mConn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=Test;Data Source=yang"
mConn.CursorLocation = adUseClient ' 设置为客户端
mConn.Open
End Sub
' 关闭数据连接
Private Sub Form_Unload(Cancel As Integer)
mConn.Close
Set mConn = Nothing
End Sub
‘贰’ vb中如何执行SQL语句
Private Sub Command1_Click()
On Error GoTo errhandle
Dim conn As New ADODB.Connection, rs As New ADODB.Recordset
If Trim(Text1.Text) = "" Then
MsgBox "没有输入sql语句"
Exit Sub
Else
If Left(Trim(Text1.Text), 6) = "select" Then
MsgBox "不是查询语句"
Exit Sub
End If
End If
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "test.mdb;Persist Security Info=False"
rs.Open Trim(Text1.Text), conn, adOpenKeyset, adLockOptimistic
Set DataGrid1.DataSource = rs
DataGrid1.Refresh
Set rs = Nothing
Set conn = Nothing
rs.Close
conn.Close
Exit Sub
errhandle:
MsgBox "输入的sql语句有误"
End Sub
‘叁’ 在VB中如何动态执行SQL语句
在编写SQL语句时直接用变量替换
Connection.Open("Select * From xs Where xh in (" & n1 & ", " & n2 & ")"
如n1, n2为字符串,则用单引号包含
‘肆’ VB 执行SQL语句
VB中“对象关闭时,不允许操作”解决方案
最近两天在VB里弄一些小程序,好久没接触了,感觉有些陌生了,还算有点基础吧,遇到一些小的难题基本上都能解决。不过,这下真的遇到难题了,琢磨半天硬是没弄出结果来,在网上查资料也没个底,如同大海捞针呀,关键是没一点正经的答案和可行的方案。
问题是这样的,在VB中执行存储过程,想输出返回值并将数据绑定到DataGrid控件中,本来是件小菜的问题,在.NET、ASP里都做通过,但在VB里却是折磨了半天也没弄出来。还是自己动手吧,有问题就得想办法,一步步来吧。
先在SQL 2000中写好存储过程了,(这里不再写出存储过程的具体代码了,也就是一个返回值,一个记录集)然后在VB中引用ADO对象,输入如下代码,以调用存储过程:
Dim lackconn As New ADODB.Connection
lackconn.ConnectionString=Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Password=boyd;Initial Catalog=mydb;Data Source=(local)
lackconn.CursorLocation = adUseClient '设置为客户端
lackconn.Open
Set lackcmd = New ADODB.Command
lackcmd.ActiveConnection = lackconn
lackcmd.CommandText = myproc '这里为存储过程名称
lackcmd.CommandType = adCmdStoredProc '指定为存储过程
Set param = lackcmd.CreateParameter(@num, adInteger, adParamReturnValue, 4) '@num为返回值
lackcmd.Parameters.Append param
Set lackrs = New ADODB.Recordset
Set lackrs = lackcmd.Execute()
msgbox 站点总数: & lackcmd.Parameters(@num).Value & 个
Set mydatagrid.DataSource = lackrs 'mydatagrid为对象名称
mydatagrid.Refresh '刷新DataGrid
'下面关闭数据库对象等略去
就这样的一个简单的代码,一运行就出错,提示错误在“Set mydatagrid.DataSource = lackrs”,错误就是“对象关闭时,不允许操作”。郁闷ing...,这哪来的错误呢?我根本没关闭数据库连接,其他内容也是没有问题的呀。花了很长时间没能解决,大清早再打开电脑时,灵机一动,搞定了。这里将这种现象作下总结,顺便记录一下本次解决过程。
产生这种现象有几种原因:
1、数据库对象连接被关闭了,这肯定会报错的,当然也不能输出任何结果的,这时只需注意“先使用、后关闭”就行了,解决这样的问题就是暂时先不要关闭数据库连接就行了。
2、返回记录为空时,也会报错。如下面的代码
sql = select * from dbcn where 状态='0'
Set rs = conn.Execute(sql)
If Not rs.EOF Then
For m = 1 To rs.RecordCount
List_status.AddItem rs(1) & ( & rs(2) & ): & rs(4)
rs.MoveNext
Next m
End If
如果没有数据的话,这里也会提示这样的错误,将查询代码放到SQL查询分析器里运行一下,果然没有数据,呵呵。当然这样的错误可以采用一些方法排除或过滤的。
3、这就是我这次所遇到的问题的中心了,我们将目光转向存储过程。的确,在SQL查询分析器里,存储过程是正常运行,而且不会报错,也有数据。但仔细想想,因为在存储过程可能包含了有关SQL语句影响行数的信息,这样一来也就可能会导致这样的情况。
打开存储过程,在begin后面加上一句代码:set nocount on,屏蔽掉这些信息。OK,VB中的程序巳经能够正常运行了,而且数据也是正常的。
顺便解释一下吧,打开查询分析器中的帮助,查找一下有关set nocount on的信息,我们会找到这些东西:
====================================
SET NOCOUNT
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。
语法
SET NOCOUNT { ON | OFF }
注释
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示nn rows affected。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显着提高性能。
SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
权限
SET NOCOUNT 权限默认授予所有用户。
示例
下例在 osql 实用工具或 SQL Server 查询分析器中执行时,可防止显示有关受影响的行数的信息。
USE pubs
GO
-- Display the count message.
SELECT au_lname
FROM authors
GO
USE pubs
GO
-- SET NOCOUNT to ON and no longer display the count message.
SET NOCOUNT ON
GO
SELECT au_lname
FROM authors
GO
-- Reset SET NOCOUNT to OFF.
SET NOCOUNT OFF
GO
这里点到为止吧,具体的解释我想MS的帮助会比我说的更专业更清楚些,参考下吧。
‘伍’ 如何在VB中执行SQL脚本文件
Execute
ExecuteSQL()
‘陆’ VB中调用SQL语句的问题
改成这样就可以了
,你掉了单引号
ssql
=
"insert
into
login(UserName,PassWord)
values
('"
&
TxtUserName.Text
&
"','"
&
TxtPW.Text
&
"')"
PassWord这个词是
access
的关键字,你在Login中
将它改为UserPassWord,再把程序中的PassWord改为UserPassWord
,
就可以了
‘柒’ 如何在VB中执行SQL脚本文件
在MSSQL SERVER的查询分析器中可通过输入如下命令,来执行一个外部的*.sql文件:
EXEC master.dbo.xp_cmdshell 'osql -U username -P password -i "filename"'
注意格式:xp_cmdshell后面的全部字符串要用单引号括起来,由于外部文件名中可能含有空格,所以要把filename字符串再用双引号括起来。比如你的SQL SERVER的用户名为sa,密码为sa,有一个外部文件为C:\Data Base.sql.那么这条语句就应该写成:
EXEC master.dbo.xp_cmdshell 'osql -U sa -P sa -i "C:\Data Base.sql"'.
说了半天,这还是在SQL SERVER中的操作,那么在VB中用代码如何实现呢?
我用VB写了一个小工程,全部代码如下:
Private Const ServerName = "Rock"
Private Const UserID = "sa"
Private Const PWD = "Rock"
Private Const ExternFile = "E:\Wang JX\DATABASE.SQL"
Private Sub Form_Load()
Dim conn As New Connection
Dim rs As New Recordset
Dim sql As String
sql = "master.dbo.xp_cmdshell 'osql -U " & UserID & " -P " & PWD & " -i """ & ExternFile & """'"
conn.Open "provider=sqloledb;data source=" & ServerName & ";user id=" & UserID & ";pwd=" & PWD
conn.Execute sql '这一句执行的可能会慢一些
End Sub
‘捌’ 怎么用vb执行sql脚本
做一个存储过程,定义传入变量。
在程序中获取的字段的名字付给这个数据库的变量。执行存储过程就可以了
‘玖’ vb怎么执行sql语句
先是定义一个字符串变量,然后把你要写的SQL语句赋给它。这时如果要把一些VB控件里的数据加进去也一样就是一个字符串联接而以,唯一要注意的是标点符号的使用如:' 这个符号,因为很多时候要用到这个,我碰到好多人都是这里出错了。例如:Dim strsql As String
strsql = "select * from TblSystemData"
If dh.Text <> " " Then '单号
strsql = strsql & " where ChrCode like " & "'" & dh.Text & "'"
End If
当然你也可以把第一个它移到前面去。但我是单独放出来,这样更清楚一点。
接着是执行了。这个你可以看一下二楼的。例如:rst3.Open strsqlm con1_offer, adOpenKeyset, adLockOptimistic, adCmdText
‘拾’ VS 的VB语言怎么执行SQL语句还有怎么输出表里的内容 求解答!谢谢! 连接数据库已经会了!
VB使用ADO数据库可以分为有源数据库和无源数据库,即是否使用了DSN数据源,如下例:
1、在连接数据库前首先要在VB菜单中“工程”-“引用”从中选择 microsoft activeX Data objects 2.6 library和 microsoft activeX Data objects recordset 2.6两个组件,这是在连接数据前所必做的工作。
2、接下来定义ADO的连接对象,如下所示:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
第一种方法采用的是无源的数据库连接方法
conn.ConnectionString = "Driver={sql server};server=JSZX3-11;uid=sa;pwd=;database=wzc"
conn.ConnectionTimeout = 30
conn.Open
rs.Open "select 用户名,密码 from login where 用户名='" & Trim(Combo1.Text) & "' And 密码='" & Trim(Text1.Text) & "'", conn, adOpenStatic, adLockReadOnly, adCmdText
If rs.EOF = True And rs.BOF Then
m = MsgBox("请重新登录", vbExclamation)
Text1.Text = ""
Text1.SetFocus
Else
Form1.Hide
End If
rs.Close
这是第二种方法连接数据库的方法,这一种方法是采用有源的方法与数据库连接的方法,代码如下所示:
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "DSN=login;uid=sa;pwd=;"
conn.ConnectionTimeout = 30
conn.Open
rs.Open "select 用户名 from login", conn, adOpenStatic, adLockReadOnly, adCmdText
Dim i As String
For t = 0 To Val(rs.RecordCount) - 1
i = Trim(rs.Fields("用户名").Value)
rs.MoveNext
Combo1.AddItem i
Next t
rs.Close