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 で使用できるローカル データセット) とSqlServerを混在させているようです。名前空間SqlCeEngineの一部です。System.Data.SqlServerCeしたがって、SqCompact ファイルを作成すると、engine.CreateDatabase()メソッドは 2 回目に例外を発生させます。接続文字列は正しいようです (SqlServerCompact ファイルの場合)。接続文字列にフル パスを指定しない場合 (ここのようにデータベース名を設定するだけ)、データベースはapp.exeが実行された場所 (= |DirectoryPath|) に作成されます。拡張子を持つファイルを探す必要があります.sdf

2)タイプはわかりませんが、接続文字列ServerConnに表示されているので、クラス"Provider=SQLOLEDB;"を使用していると思います。OLEDB代わりにマネージド SqlServer クラス (System.Data.SqlServer名前空間) を使用する必要があります。したがって、、、...、オブジェクトを使用する必要がSqlConnectionありSqlCommandます。すでに使用している場合は、プロバイダーが間違っているため、接続文字列を確認してください。いずれにしても、1)で最初に作成したファイルにはアクセスできません。

3) 目標が SqlServer Datatase を作成することである場合、残念ながら、 のSqlServerEngineようなクラスはどこにもありませんSqlServerCe

データベースを作成するには、次の方法が考えられます。

  • Sql Server Management studio を使用した設計時
  • scrits を実行する (Sql Server Management studio 経由、または .Net コード経由、...)
  • クラスの使用System.Data.SqlServer.Smo(.Net)
于 2013-09-04T19:48:40.730 に答える
0

以下は、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 に答える
0

マスター データベースへのサーバー接続を開いているようです。マスター データベースは、SQL サーバー エンジンがそのサーバー上のすべてのデータベースに関するすべての重要な情報とメタ データを保持する場所です。

に置き換える必要がありdatabase=masterますdatabase=WHATEVER DATABASE NAME YOU CREATED。他のすべてが失敗した場合は、SQLサーバーに移動してこれを実行します

use master;
select * from sysdatabases

これにより、マスターが「監視」しているすべてのデータベースの名前が得られます。作成しようとしたものを見つけて、に置き換えdatabase=masterますdatabase=the one you found

于 2013-09-04T19:19:59.423 に答える