使用VB远程创建SQL数据库及
在进行C/S架构的数据库管理系统中,首要做的一件事是,给远程数据库服务器创建数据库及表、视图、存储过程等等。或是由于某种原因,需要对远程数据库进行修改或建表等等。于是就产生了远程操作数据库服务器的要求。
在这里,远程服务器的数据库是MS SQL2000,服务器地址是:192.168.28.200,数据库服务器使用WINDOWS身份验证,用户名sa,密码hssxezflb。
一、远程连接数据库服务器并创建数据库。
因为使用ADO连接数据库,故在“工程”->“引用”添加Microsoft ActiveX Data
Objects 2.6 Library。
需要创建数据库,首先要连接到数据库服务器,需要连接到数据库master。
1、数据定义
Dim ConnStr As String „数据库连接字符串
Dim SqlStr As String „查询语言字符串
Dim conn As New ADODB.Connection „ADO连接对象
Dim rs As New ADODB.Recordset „ADO数据集
2、设置数据库连接字符串并连接数据库master
ConnStr ="Driver={SQL Server};
Server=192.168.28.200;
Uid=sa;
Pwd=hssxezflb;
database=master" „可以写在一行,这里是为了排版需要
conn.Open ConnStr „打开数据库
if conn.State<>adStateOpen Then
msgbox “数据库打开失败”
exit sub
end if
数据库打开失败,原因很多,见《Window 2003 SQL2000远程连接的问
解决
.doc》
数据库连接字符串的方式也可以这样进行
写
ConnStr ="Provider=sqloledb.1;
password=hssxezflb;
user id=sa;
initial catalog=master;
data source=192.168.28.200”
3、创建所需要的数据库
在master数据库中,有一个表sysdatabases,记录了本SQL服务器的所有数据库。通过查询是否存在欲创建的数据库,如果不存在,则创建。如果存在,则另做处理(一般是换个数据库名称)。设欲创建的数据库名称为flb。
SqlStr = "select Name from dbo.sysdatabases where Name = 'flb';"
rs.Open SqlStr, conn, adOpenKeyset, adLockOptimistic
If rs.RecordCount = 0 Then '数据库不存在,则创建数据库
rs.Close
conn.BeginTrans „启动事件
SqlStr = "Create Database flb;"
conn.Execute SqlStr
conn.CommitTrans „提交事件
Else
msgbox “数据库flb已经存在,无法创建。”
rs.Close „数据库存在,给予提示
End If
4、完整代码如下:
‘远程连接数据库服务器并创建数据库flb
Private Sub Command1_Click()
Dim ConnStr As String
Dim SqlStr As String
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
ConnStr = "Driver={SQL
Server};Server=192.168.28.100;Uid=sa;Pwd=hssxezflb;database=master"
conn.Open ConnStr
if conn.State<>adStateOpen Then
msgbox “数据库打开失败”
exit sub
end if
SqlStr = "select Name from dbo.sysdatabases where Name = 'flb';"
rs.Open SqlStr, conn, adOpenKeyset, adLockOptimistic
If rs.RecordCount = 0 Then '数据库不存在,则创建数据库
rs.Close
conn.BeginTrans
SqlStr = "Create Database flb;"
conn.Execute SqlStr
conn.CommitTrans
Else
msgbox “数据库flb已经存在,无法创建。”
rs.Close
End If
End Sub
二、连接新创建的数据库并创建表、视图、存储过程
1、连接新创建的数据库
根据上述过程,只需要把master改为flb即可。
ConnStr ="Driver={SQL Server};
Server=192.168.28.200;
Uid=sa;
Pwd=hssxezflb;
database=flb" „可以写在一行,这里是为了排版需要
conn.Open ConnStr „打开数据库
if conn.State<>adStateOpen Then
msgbox “数据库打开失败”
exit sub
end if
2、使用SQL脚本创建表
在事先已经建立好的数据库上,打开SQL企业管理吕,选中欲创建脚本的表,然后按
右键->所有任务->生成SQL脚本。(或者单击“工具”->“生成SQL脚本”)。
如下所示:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DcBs]')
and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[DcBs]
GO
CREATE TABLE [dbo].[DcBs] (
[dc_id] [bigint] NOT NULL ,
[dc_cqr] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_sfz] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_xm] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_gx] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_nr1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_nr2] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_nr3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_nr4] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_sj] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[dc_dw] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]
GO
:第一个GO之前,是查询是否存在表DCBS,如果存在,则删除它。
第二GO之前,是创建表的结构,按列号排序是“字段名”、“数据类型”、“大小”、“是
否非空”。
这些脚本可以地SQL查询分析器中直接执行的。在这里,只需要把第二个GO的内容,
做为一个字符串的值,使用EXECUTE来执行。如下:
Dim SqlTxt As String
SqlTxt = "CREATE TABLE [dbo].[DcBs] (" & _
"[dc_id] [bigint] NOT NULL ," & _
"[dc_cqr] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_sfz] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_xm] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_gx] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_nr1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_nr2] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_nr3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_nr4] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_sj] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ," & _
"[dc_dw] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL " & _
") ON [PRIMARY]"
conn.Execute SqlTxt
VB执行SQL脚本文件(.sql)的两种方式 三、
1、采用读文件的方式,把脚本内容存入字符串
Public Sub ExecuteSQLScriptFile(cn as ADODB.Connection,sqlFile As String) DimSqlStr As String, TmpStr As String
Open sqlFile For Input As #1
strSql = ""
Do While Not EOF(1)
Line Input #1, strTmp
If UCase$(strTmp) = "GO" Then
cn.Execute strSql
strSql = ""
Else
strSql = strSql & strTmp & vbCrLf
End If
Loop
If strSql <> "" Then cn.Execute strSql
Close #1
End Sub
2、使用CMD执行文件的方式执行脚本文件
Public Sub ExecuteSQLScriptFile(cn as ADODB.Connection,sqlFile As String)
Dim sql as string
sql="master.dbo.xp_cmdshell ? osql -U username -P password -i " & sqlFile
cn.execute sql
End Sub