繁体   English   中英

在SQL Server 2008 R2中创建新的数据库

[英]Create new Database in SQL Server 2008 R2

我使用以下代码在SQL Server 2008 R2中创建一个新数据库,程序语言为VB.NET:

Dim WEBconnString As String = "Data Source='NewName'; LCID=1032; Case Sensitive = FALSE; SSCE:Database Password=NewDBpass; Encrypt = TRUE;"
Dim engine As New SqlCeEngine(WEBconnString)
engine.CreateDatabase()

另外:

我按照以下说明打开Web服务器连接:

ServerConn.ConnectionString = "Provider=SQLOLEDB; Data Source=" & WebServerName & _
                         "; Database=master" & _
                         "; Uid=" & TempUserName & _
                         "; Pwd=" & TempUserPass
ServerConn.Open()

我还使用数据库连接,并遵循以下指令:

SQLConn.ConnectionString = "server=" & WebServer & "; Uid=" & AdminName & "; Pwd=" & AdminPassword & "; database=master"
SQLConn.Open()

为了能够使用我的指令。 我已经在ISP SQL Server中创建了一个临时数据库,并且正在使用该数据库的凭据作为登录名和密码。

第一次使用; 它工作正常,意味着在某处创建数据库

现在,我正在尝试查看该数据库,但找不到任何内容

我再次运行相同的代码,因为它向我暗示未创建数据库,并且在引擎指令处给我一个错误“数据库存在”

问题是:在哪里打开新数据库?

请给我我在VB.NET中可能需要的任何解决方案

1)似乎您正在混合使用SqlServerCompact (从4.0版开始可以在ASP.NET中使用的本地数据仓库)和SqlServer SqlCeEngineSystem.Data.SqlServerCe命名空间的一部分。 因此,您创建了一个SqCompact文件,并且engine.CreateDatabase()方法第二次引发异常。 连接字符串似乎正确(对于SqlServerCompact文件)。 如果未在连接字符串中指定完整路径(只需在此处设置数据库名称),则将在执行app.exe位置创建数据库(= |DirectoryPath| )。 您将需要查找扩展名为.sdf的文件。

2)我不知道ServerConn是什么类型,但是因为看到"Provider=SQLOLEDB;" 在您的连接字符串中,我想您正在使用OLEDB类。 您应该改用托管的SqlServer类( System.Data.SqlServer命名空间)。 因此,您应该使用SqlConnectionSqlCommand ,...对象。 如果您已经使用它们,则请检查您的连接字符串,因为提供者有误。 无论如何,在两种情况下,您都无法访问在1)中首先创建的文件。

3)不幸的是,如果您的目标是创建SqlServer Datatase,那么在SqlServerCe中就没有SqlServerEngine类。

要创建数据库,可以采用以下几种方法:

  • 在设计时使用Sql Server Management Studio
  • 通过执行脚本(通过Sql Server Management Studio,或通过.Net代码,...)
  • 使用System.Data.SqlServer.Smo类(.Net)

似乎您正在打开与master数据库的服务器连接。 主数据库是sql服务器引擎保存有关该服务器上所有数据库的所有重要信息和元数据的地方。

我需要将database=master替换为database=WHATEVER DATABASE NAME YOU CREATED 其他所有失败均转到sql服务器并运行

use master;
select * from sysdatabases

这将为您提供master正在“监视”的每个数据库的名称。 找到您尝试创建的database=master然后将database=master替换为database=master database=the one you found

这是一个易于使用的子程序,用于创建过程:

Public Shared Sub CreateSP(ByVal usp As String, ByVal sender As Object, ByVal e As System.EventArgs)
        Dim RetValue As Boolean = False

        Try
            DBConnection("SQLConn", "SQLUSER", "master", False, sender, e)
            Select Case SQLConn.State
                Case ConnectionState.Open

                    MASQLComm = New SqlCommand("CREATE PROCEDURE [dbo].[" & usp & "]" & _
                      NewLine & " ( " & _
                      NewLine & "@DBName varchar(50) ) AS " & NewLine & _
                       "BEGIN_TRY: " & NewLine & " SET QUOTED_IDENTIFIER ON;" & NewLine & " SET NOCOUNT ON; " & _
                       NewLine & "DECLARE " & _
                       NewLine & "@ErrMsg nvarchar(4000), " & _
                       NewLine & "@CreateSdb nvarchar(4000)" & _
                       NewLine & "SET @CreateSdb =('CREATE DATABASE ' + @DBName )" & _
                       NewLine & "BEGIN_CATCH:" & NewLine & "SELECT ERROR_MESSAGE() as ErrorMessage;" & _
                       NewLine & "SELECT @ErrMsg = ERROR_MESSAGE()" & _
                       NewLine & "EXEC sp_executesql @CreateSdb" & _
                       NewLine & "RAISERROR (@ErrMsg,2,1)" & _
                       NewLine & "Return 0" & NewLine & "END_CATCH:" & NewLine & "Return 1" & NewLine & "END_TRY: ", SQLConn)
                    If MASQLComm.Connection.State = ConnectionState.Open Then
                        MASQLComm.ExecuteNonQuery()
                    Else
                        MASQLComm.Connection.Open()
                        MASQLComm.ExecuteNonQuery()
                    End If
            End Select
            Success = True
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Class 'DB_Access' CreateSP ", MessageBoxButtons.OK, MessageBoxIcon.Stop)
            Success = False
        End Try
        MASQLComm.Connection.Close()

    End Sub

这是用于运行上述过程的代码:

Public Shared Sub RunSP(ByVal DrivePath As String, ByVal DBname As String, ByVal sender As Object, ByVal e As System.EventArgs)
        Try

             DBConnection("SQLConn", "SQLUSER", "master", False, sender, e)
            MASQLComm = New SqlCommand("EXEC dbo." & procName & " '" & DBname & " '", SQLConn)
        MASQLComm.ExecuteNonQuery()
            MASQLComm.ExecuteNonQuery()
            MASQLComm = New SqlCommand("ALTER DATABASE " & DBname & " SET RESTRICTED_USER WITH ROLLBACK IMMEDIATE", SQLConn)
            MASQLComm.ExecuteNonQuery()
            Success = True
        Catch qx As SqlException
            MessageBox.Show(qx.Message, "Class 'NainClass' Run Stored Procdure", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            Success = False
        End Try

        MASQLComm.Connection.Close()
    End Sub

这是SQLconn connectionstring的代码:

 If Not CBool(SQLConn.State) Then
                                SQLConn.ConnectionString = "server=" & ServNameKeyValue & "; Uid=" & cUserName & ";  Pwd=" & cUserPass & "; database=" & DBname
                                SQLConn.Open()
                            Else
                                SQLConn.Close()
                                SQLConn.ConnectionString = "server=" & ServNameKeyValue & "; Uid=" & cUserName & ";  Pwd=" & cUserPass & "; database=" & DBname
                                SQLConn.Open()
                            End If

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM