文章 1 - 通过 Whidbey (或 VB.NET) 动态创建 SQL Server 数据库、表和存储过程






1.75/5 (12投票s)
2004年4月26日
4分钟阅读

90710
本文分步介绍了如何通过 Whidbey (或 VB.NET) 动态创建 SQL Server 数据库、表和存储过程。
引言
本文分步介绍了如何通过 Whidbey (或 VB.NET) 动态创建 SQL Server 数据库、表和存储过程。
创建数据库应用程序的步骤
1. 数据库连接类及其参数
SqlConnection
类允许您与 SQL Server 进行通信,它通过导入 System.Data.SqlClient
类来实现,如下所示:
Imports System.Data.SqlClient
SqlConnection
构造函数接受一个连接字符串作为参数。此连接字符串使用集成身份验证,这意味着您必须在 SQL Server 中拥有登录账户,或者属于管理员组才能使其正常工作。
SqlConnection
类可以按如下方式声明:
Dim myDBSQLConnection As New SqlConnection(MyConnection)
您需要为 SQL 连接和 MSDE 连接初始化连接字符串。这样,如果 SQL DB 连接失败,它将尝试通过 MSDE 连接来连接数据库。声明这些连接的代码行如下所示:
MyConnection = "Server=localhost;" & _
"DataBase=;" & _
"Integrated Security=SSPI"
Protected Const MY_MSDE_CONNECTION_STRING As String = _
"Server=(local)\;" & _
"DataBase=;" & _
"Integrated Security=SSPI"
2. 声明并初始化 SqlCommand 对象
SqlCommand
对象用于执行 SQL 命令。以下代码行解释了如何在 .NET 环境中声明一个名为 “SqlCommand” 的命令对象:
Dim cmd As New SqlCommand(strSQL, MyConnection)
您还可以声明 mySQL
字符串变量来声明数据库创建 DDL 语句,如下所示:
Dim mySQL As String = _
"IF EXISTS (" & _
"SELECT * " & _
"FROM master..sysdatabases " & _
"WHERE Name = 'MyDatabase')" & vbCrLf & _
"DROP DATABASE MyDatabase " & vbCrLf & _
"CREATE DATABASE MyDatabase "
上述 SQL 语句执行以下操作:
- 第一条语句检查数据库中是否已存在名为 “
MyDatabase
” 的数据库。 - 下一步是删除
myDatabase
(如果它已存在)。即使找不到任何数据库,该命令仍会执行,但不会创建任何数据库。 - 第三步是创建一个名为 “
myDatabase
” 的新数据库。
3. 打开连接,执行创建数据库的查询
成功创建 SqlCommand
后,下一个任务是使用连接字符串和 mySQL
SQL 参数字符串打开连接,执行命令并关闭连接。
以下代码行解释了如何从 SQL Server 数据库打开连接、执行命令并关闭数据库连接。
MyConnection.Open()
cmd.ExecuteNonQuery()
MyConnection.Close()
请注意,此处使用 ExecuteNonQuery
来执行数据库操作,因为当不返回数据时,使用此命令更有效。
您可以使用 ExecuteNonQuery
来执行目录操作(例如,查询数据库结构或创建数据库对象,如表);或者通过执行 UPDATE
、INSERT
或 DELETE
语句来更改数据库中的数据,而无需使用 DataSet
。
如果底层 ODBC 驱动程序支持此功能,您也可以使用 ExecuteNonQuery
执行多个 SQL 语句。在这种情况下,返回值是命令中所有语句影响的行数。
尽管 ExecuteNonQuery
不返回任何行,但任何映射到参数的输出参数或返回值都会填充数据。
对于 UPDATE
、INSERT
和 DELETE
语句,返回值是命令影响的行数。对于所有其他类型的语句,返回值是 -1。如果发生回滚,返回值也为 -1。
4. 捕获 SQL 异常错误
捕获 SQL 异常错误是避免 SQL Server 连接问题的另一种方法。try … Catch … Exception
语句提供了一种机制来捕获块执行期间发生的 SQL 异常。此外,try
语句提供了指定一个在控件离开 try
语句时始终执行的代码块的能力。这样,我们可以跟踪关联的 SQL 异常错误,从而为解决 SQL 数据库连接问题提供帮助。
以下代码行对此进行了说明。
Try
Dim myCmd As New SqlCommand(strSQL, MyConnection)
' Open the connection, execute the command, and close
‘ the connection. It is more efficient to
‘ ExecuteNonQuery when ‘ data is
' not being returned.
myConnection.Open()
myCmd.ExecuteNonQuery()
MyConnection.Close()
' Data has been successfully submitted
MessageBox.Show("New Database has been ' successfully created !", _
" Database Creation Completed", MessageBoxButtons.OK, _
MessageBoxIcon.Information)
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Catch exc As Exception
If mstrConn = MyConnection Then
' Couldn't connect to SQL Server. Now try MSDE.
mstrConn = MY_MSDE_CONNECTION_STRING
‘ Connecting to MSDE
Else
' Unable to connect to SQL Server or MSDE
MessageBox.Show(“SQL Or MSDE Connection Failed”, _
"Connection Failed!", MessageBoxButtons.OK,
MessageBoxIcon.Error)
End
End If
End Try
5. 创建数据库表/存储过程
成功打开连接后,下一步是创建数据库表、创建数据库视图的存储过程。
' A SqlCommand object is used to execute the SQL commands.
Dim myCmd As New SqlCommand(mySQL, myConnection)
Try
' Creating tables
cmd.CommandText = "USE MyDatabase" & vbCrLf & _
"if exists (select * from dbo.sysobjects " & _
"where id = object_id(N'[dbo].[MyTable]') " & _
" and OBJECTPROPERTY(id, N'IsUserTable') = 1)” & vbcrlf & _
“drop table [dbo].[Customer] ” & vbcrlf & “GO “ & vbcrlf & _
“CREATE TABLE [dbo].[Customer] ( " & vbcrlf & _
"[CustomerID] [int] IDENTITY (1, 1) NOT NULL ,” & vbcrlf & _
“[NameLast] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,,“ & _
vbcrlf & _
“[NameFirst] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,,“ & _
vbcrlf & _
“[NameMiddle] [varchar] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,,“ &_
vbcrlf & _
“[Prefix] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, “ & _
vbcrlf & _
“[Suffix] [varchar] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, “ & _
vbcrlf & _
“[Address1] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, “ & _
vbcrlf & _
“[Address2] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,““ & _
vbcrlf & _
“[City] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , “ & _
vbcrlf & _
“[State] [varchar] (4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , “ & _
vbcrlf & _
“[Zip] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , “ & _
vbcrlf & _
“[Phone] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ) “ & _
vbcrlf & _
“ON [PRIMARY] “ & vbcrlf & _
“GO”
' Open the connection, execute the command, and close ‘ the connection.
' It is more efficient to ExecuteNonQuery when data ‘
‘ is not being returned.
myConnection.Open()
mycmd.ExecuteNonQuery()
myConnection.close()
MessageBox.Show("Database Table ‘MyTable” & _
“successfully created.", " Creation“ & _ “Status", _
MessageBoxButtons.OK,MessageBoxIcon.Information)
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
‘ Creating stored procedures
Try
cmd.CommandText = "USE MyDatabase" & vbCrLf & _
"IF EXISTS (" & _
"SELECT * " & _
"FROM MyDatabase.dbo.sysobjects " & _
"WHERE Name = ‘MyStoredProc’ " & _
"AND TYPE = 'p')" & vbCrLf & _
"BEGIN" & vbCrLf & _
"DROP PROCEDURE MyStoredProc" & vbCrLf & _
"END"
' Open the connection, execute the command, and close ‘ the connection.
' It is more efficient to ExecuteNonQuery when data ‘
‘ is not being returned.
myConnection.Open()
mycmd.ExecuteNonQuery()
myConnection.close()
MessageBox.Show("Stored Procedure ‘MyStoredProc” & _
“successfully created.", " Creation“ & _ “Status", _
MessageBoxButtons.OK,MessageBoxIcon.Information)
Catch sqlExc As SqlException
MessageBox.Show(sqlExc.ToString, "SQL Exception Error!", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
要求
- Microsoft Visual Studio.Whidbey Ver 8.0 或 Microsoft Visual Studio .NET Professional 或更高版本。
- Windows 2000 或 Windows XP。
摘要
通过本文,您了解了如何使用 SQL Server 数据库打开新的数据库连接。此外,文章还重点介绍了如何在 SQL Server 中创建动态数据库、表和存储过程。异常处理机制的使用确实有助于跟踪自定义 sqlException
错误。
我的下一篇文章将介绍动态创建完成后,如何查询以填充 Dataset
并显示在 DataGrid
中。
谢谢
您可以 在此处 联系我。