VB實現SQL Enterprise Manager功能 (轉)

worldblog發表於2007-12-10
VB實現SQL Enterprise Manager功能 (轉)[@more@]完成在 SERVER中建立裝置,建立資料庫,建立表格,分配的功能方便了資料庫應用所需環境的建立,根本不用啟動SQL Enterprise Manager資料庫。
   這個由VB開發,利用ADO 訪問資料庫,實現更改資料庫結構,其他語言也可以此作為參考。啟動.0,新建一個工程,在選單-工程-引用裡選" Data s 2.0 Library",程式碼裡需要有

dim conn As New ADO.Connection
定義ADO資料庫
conn.ConnectionString = "={SQL Server};" & _
"server=" & ServerName & ";uid=" & UserName & ";
pwd=" & Pass & ";database=" & DatabaseName & ""
連線資料串
conn.open 連線資料庫

   注:ServerName為名;UserName為名;Password為使用者口令; DatabaseName要登入的資料庫名,可以為空。
   核心程式碼如下:

一、建立資料庫
   原理:建立資料庫先要初始化一個資料庫裝置,然後在此裝置上建立資料庫。所有的裝置名在表"sysdevices"裡有記錄,所有的資料庫名在系統表"sysdatabases"裡有記錄。在建立之前,最好先查詢這兩個系統表,看名稱是否已經存在。在建立裝置之前,還需要的一個物理名和空閒的裝置標識號。
初始化裝置語法:
DISK INIT NAME="device_name",PHYNAME=
"physical_name",VDEVNO=device_number,
SIZE=numberofblock

   說明:這裡,NAME是資料庫裝置名(一個有效的識別符號),PHYNAME(資料庫裝置的物理名)是原始的分割槽或外設(vms)名,或者是的名。VDEVNO時資料庫的裝置標識號,合法值為1-255,SIZE的單位是2KB的塊,例如1MB(1024KB)時SIZE值為512。
   建立資料庫語法:CREATE DATABASE database_name [ON database_device]

   說明:database_name是要建的資料庫名,database_device是裝置名

   要新建立一個資料庫,就需要裝置名,資料庫名,物理名和裝置號。具體步驟如下:

   我們假設使用者要新建立裝置dbName,在裝置dbName上建立資料庫dbName。

   1)得到裝置名 bName是使用者給出的裝置名;先查詢系統表sysdevices,看使用者給出的裝置名dbName是否已經存在,如果此裝置名存在,就需要更換一個裝置名,因為裝置名是唯一的。

sql = " * from sysdevices
where name=" & dbName & ""
Set rs = conn.Execute(sql)
If Not rs.EOF Then
MsgBox "裝置名"" & dbName & ""
已存在!", 16, "請重新輸入名稱"
Exit Sub
End If

   2)得到資料庫名。dbName是使用者給出的資料庫名;查詢系統表sysdatabases,看使用者給出的資料庫名dbName是否已經存在,如果此資料庫存在,就需要更換一個資料庫名,像裝置名一樣,資料庫名也是唯一的
sql = "select * from sysdatabases
where name=" & dbName & ""
Set rs = conn.Execute(sql) 下面程式碼略

   3)得到PHYNAME物理名。查詢伺服器上資料庫檔案的物理位置serverpath,典型的,我們可以從系統表sysdevices中查詢master(這是SQL Server的主庫名)資料庫的位置,例如G:MSSQLDATAMASTER.DAT,則我們的資料庫可以建在"G:MSSQLDATA"目錄下。
sql = "select name,phyname from sysdevices "
low/16777216為裝置號
Set rs = conn.Execute(sql)
然後遍歷記錄物件rs,當name="master"時,取出phyname,
從而可以得到物理位置serverpath =G:MSSQLDATA。

   4)得到一個空閒的裝置號vdevno。裝置號合法值1~255,遍歷這些號,查詢出未被使用的空閒裝置號,下面程式得到已有的裝置號
sql = "select distinct low/16777216
from sysdevices order by low/16777216"
low/16777216為裝置號

   5)建立資料庫。所需的資訊都準備完畢,可以建立資料庫了(注:下面的"" & Chr(34) & ""就是一個"""雙引號,這樣處理後,才能滿足語法要求;資料庫為20M,則dbSize=512*20)
sql = "DISK INIT NAME=" & Chr(34) & ""
& dbName & "" & Chr(34) & ",PHYSNAME="
& Chr(34) & "" & serverpath & "" & dbName
& ".dat" & Chr(34) & ",VDEVNO=" & vdevno
& ",SIZE=" & dbSize & ""
Set rs = conn.Execute(sql) 初始化裝置
sql = "CREATE DATABASE " & dbName & "
on " & dbName & "=" & dbSize & ""
注:
第一個dbName是資料庫名,
第二個dbName是裝置名
Set rs = conn.Execute(sql)
在裝置dbName上建立資料庫dbName
MsgBox "資料庫"" & dbName & ""建在伺服器上
"" & serverpath & "" & dbName & ".dat",
建立成功!", 64, "成功"

二、建立表格
   建立表格比較簡單,這裡用到了自動計數字段和預設值欄位型別,語法如下:
CREATE TABLE table_name
(field_name data_type [NOT NULL|NULL],…)

   說明:table_name為新建的表名,field_name為欄位名,data_type為資料型別。
(注意下面的fileid int NTITY欄位自動計數,
datetime NOT NULL DEFAULT(GETDATE())欄位每當入
庫時有個預設值,由資料庫生成當時的時間)。
sql = "CREATE TABLE " & TableName & "
(fileid int IDENTITY, filetime datetime NOT
NULL DEFAULT(GETDATE()),fileimage image NULL )"
conn.Execute sql 建立表格

三、建立使用者組使用者
   建立使用者組和使用者不能直接透過SQL語句完成,需要SQL Server的過程sp_addlogin,sp_addgroup, sp_adduser。我們假設新建登入賬號是username1,使用者名稱是username1,組名是group1,則步驟如下:
   1)建立使用者的登入賬號

語法:sp_addlogin login_name,password[,defdb]
其中,login_name是使用者的登入名,password是用
戶的口令,defdb上登入的預設資料庫名稱。建立數
據庫DatabaseName的登入賬號:
sql = "EXECUTE sp_addlogin " & username1 & ","
& password1 & "," & DatabaseName & ""
Set rs = conn.Execute(sql)

   2)增加使用者組
語法:sp_addgroup group_name
其中,group_name 是新建組名
sql = "EXECUTE sp_addgroup " & group1 & ""
Set rs = conn.Execute(sql)

   3)增加使用者
語法:sp_adduser login_name
[,name_in_db][,grpname]]
其中,login_name使用者名稱,name_in_db是使用者在當
前資料庫中的名字(這裡是第一步建立的登入賬號
username1),grpname是要將使用者加入的那個組的組名。

在資料庫DatabaseName增加使用者username1:
sql = "EXECUTE sp_adduser " & username1 & "," &
username1 & "," & group1& ""
注:第一個username1是使用者名稱,第二個username1是
資料庫DatabaseName的登入賬號
Set rs = conn.Execute(sql)

四、分配許可權
   語法:grant pession_list on object_name to who
   其中,permission_list是所要分配的許可權清單,object_name是在這個物件上的許可權,who是接受授權的使用者。

   先從系統表sysobjects得到所有的使用者建立表格名(type=U)

sql = "select name from sysobjects where type=U"
Set rs = conn.Execute(sql)

   然後從中選取所需要的表格來分配許可權給其他使用者。例如,這裡選擇將tablename3的讀取許可權分配給組group1。
sql = "grant select on " & tablename3 &
" to " & group1 & ""
conn.Execute sql

   由於這個小工具的使用,使SQL Server資料庫配置變得簡單、方便了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990759/,如需轉載,請註明出處,否則將追究法律責任。

相關文章