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

在SQL Server 2008 R2中创建新数据库,sql,database,Sql,Database,我使用以下代码在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.CreateDatab

我使用以下代码在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中可能需要的任何解决方案。看起来您正在打开主数据库的服务器连接。主数据库是sql server引擎保存该服务器上所有数据库的所有重要信息和元数据的地方

我需要将
database=master
替换为
database=您创建的任何数据库名称
。所有其他操作都失败,请转到sql server并运行此操作

use master;
select * from sysdatabases
这将为您提供master正在“监视”的每个数据库的名称。找到您试图创建的数据库,并将其替换为找到的数据库。似乎您正在混合使用SqlServerCompact(自4.0版起可在ASP.NET中使用的本地datatase)和SqlServer
SqlCeEngine
System.Data.SqlServerCe
命名空间的一部分。因此,您创建了一个SqCompact文件,
engine.CreateDatabase()
方法第二次引发异常。 连接字符串似乎正确(对于SqlServerCompact文件)。如果未在连接字符串中指定完整路径(只需像此处一样设置数据库名称),则将在执行
app.exe
的位置创建数据库(
|DirectoryPath |
)。您必须查找扩展名为
.sdf
的文件

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

3) 如果您的目标是创建一个SQLServerDatatase,不幸的是,其中没有类似于
SqlServerCe
中的
SqlServerEngine

要创建数据库,请使用以下几种可能的方法:

  • 在设计时使用Sql Server Management studio
  • 通过执行scrits(通过Sql Server Management studio,或通过.Net代码,…)
  • 使用
    System.Data.SqlServer.Smo
    class(.Net)

这里有一个用于创建过程的现成子组件:

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

我正在查找sys.database,但新名称不存在。主数据库在那里,我的ISP SQL SERVER中的所有内容都可以正常工作。但是我的新数据库?如果您得到“数据库存在”错误,并且它没有显示在我给您的查询中,您确定您连接到了正确的服务器吗?在MASTER中也要非常小心,您可以非常轻松地销毁SQL server实例。我相信您告诉我的一切。数据库不在那里。连接字符串是OK,似乎您混合了SqlServerCompact(本地datatase,自4.0版起可以在ASP.NET中使用)和SqlServer
SqlCeEngine
System.Data.SqlServerCe
命名空间的一部分。然后,在connectionstring中使用OLEDB。我很困惑。你想建立什么样的数据库?我想你和我想的很接近。SqlServerCE可能会出现一些问题。请告诉我我将在哪里找到这个.exe文件夹…在以前的数据库创建版本中,我使用了我的一个过程,这是因为我必须使用流数据库。现在我想使用一个简单的数据库创建,我没有任何“准备使用”的过程。所有其他问题正如您在Winforms项目中提到的,数据库默认在
|DirectoryPath
中创建(其中执行
app.exe
),如果您只指定数据库名称,这就是我的意思)。我不知道ASP.NET中是否存在这个概念。也许这就是项目部署的地方。您必须查找扩展名为
.sdf
的文件。但是我重复一遍,您不能使用此代码访问此数据库,因为它是用于SqlServer的。@Lefterisgkin关于
SqlServer
数据库的创建,您应该首先在这两种解决方案之间做出选择。也许我可以添加更多的链接和引用(以及正确的拼写…),但我认为我的答案不能涵盖所有的可能性,它有点宽泛…现在我正在寻找一个在我的ISP SQL SERVER上创建数据库的过程。对所有其他人来说,你是非常正确的。谢谢你,克里斯