簡體   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