當前位置:首頁 » 編程語言 » vb執行sql腳本

vb執行sql腳本

發布時間: 2023-01-01 13:59:52

『壹』 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

熱點內容
華碩天選2air配置如何選擇 發布:2025-07-03 16:10:09 瀏覽:570
asp搜索源碼 發布:2025-07-03 15:49:55 瀏覽:234
醫美大資料庫 發布:2025-07-03 15:47:07 瀏覽:356
c語言將二進制轉化為十進制 發布:2025-07-03 15:32:47 瀏覽:987
c語言幫助文檔 發布:2025-07-03 15:22:43 瀏覽:319
雙埠存儲器在情況下會發生讀寫沖突 發布:2025-07-03 15:12:54 瀏覽:270
快站資料庫 發布:2025-07-03 14:45:44 瀏覽:40
jsp獲取上傳文件路徑 發布:2025-07-03 14:44:46 瀏覽:569
php時間微妙 發布:2025-07-03 14:39:38 瀏覽:843
巨豆豆手機回復出廠密碼是什麼 發布:2025-07-03 14:35:19 瀏覽:474