1

我使用以下代码在 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 中可能需要的任何解决方案

4

3 回答 3

2

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

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

3) 如果您的目标是创建一个 SqlServer Datatase,不幸的是,没有SqlServerEngine像 in 中这样的类SqlServerCe

要创建数据库,一些可能的方法:

  • 在设计时使用 Sql Server Management Studio
  • 通过执行脚本(通过 Sql Server Management studio,或通过 .Net 代码,...)
  • 使用System.Data.SqlServer.Smo类(.Net)
于 2013-09-04T19:48:40.730 回答
0

看起来您正在打开主数据库的服务器连接。主数据库是 sql server 引擎保存该服务器上所有数据库的所有重要信息和元数据的地方。

我需要更换database=masterdatabase=WHATEVER DATABASE NAME YOU CREATED. 其他一切都失败了,转到 sql server 并运行它

use master;
select * from sysdatabases

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

于 2013-09-04T19:19:59.423 回答
0

这是一个准备使用的 sub 来创建一个 procudere:

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 连接字符串的代码:

 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
于 2013-09-05T14:54:57.223 回答