2012-02-18 2 views
0

私はDatabase2.mdfという新しいMicrosoft SQLデータベースを作成する必要のある単純なC#関数を持っています。SQLデータベースを作成する単純な関数が失敗します:何が間違っていますか?

問題:この関数はデータベースの作成に失敗します&私はなぜそれが分かりませんか?データベースを作成する方法を示すMSDNのコードをコピーしましたが、SqlConnection文字列またはSQLCommand文字列が正しいかどうかわかりません。発生

エラーは次のとおりです。

{"A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"}

マイコード:

public static string DEF_DB_NAME = "Database2"; 
    private bool create() 
    { 
     Console.WriteLine("populating data"); 
     bool res = false; 
     SqlConnection myConn = new SqlConnection("Server=localhost;Integrated security=SSPI;database=master"); 
     string str = "CREATE DATABASE "+DEF_DB_NAME+" ON PRIMARY " + 
      "(NAME = .\\SQLEXPRESS, " + 
      "FILENAME = " + DEF_DB_NAME + ".mdf', " + 
      "SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " + 
      "LOG ON (NAME = " + DEF_DB_NAME + "_Log, " + 
      "FILENAME = " + DEF_DB_NAME + "Log.ldf', " + 
      "SIZE = 1MB, " + 
      "MAXSIZE = 5MB, " + 
      "FILEGROWTH = 10%)"; 

     SqlCommand myCommand = new SqlCommand(str, myConn); 
     myConn.Open(); // ERROR OCCURS HERE 
     myCommand.ExecuteNonQuery(); 
     insertDefData(myConn); 
     myConn.Close(); 
     res = true; 

     return res; 
    } 
+0

接続を開くことができず、クエリとは関係ありません。コマンド定義の上に 'myConn.Open()'を移動することはできますが、それは引き続き発生します。 – Fosco

+0

プロバイダ:名前付きパイププロバイダローカルサーバーに接続しようとしていますか? –

+0

SQL Server Expressのインスタンスがこのコンピュータで実行されているかどうかを確認しましたか? – rcdmk

答えて

1

あなたの問題は、コマンドが失敗しているとDBが作成したばかりではないということではありません。 最初にコマンドを実行するために、をdbに接続していません。接続文字列とおそらくサーバー名(またはサーバー自体)に問題があります。

あなたの作成デシベルスクリプトによると、サーバーの名前があるように思わ\ SQLEXPRESSに応じて接続文字列を調整します。

SqlConnection myConn = new SqlConnection(@"Server=.\SQLEXPRESS ;Integrated security=SSPI;database=master"); 

チェックhere for extra detailsを、これらがチェックするものです。

  • サーバーインスタンスがデフォルトですか?そうでない場合は、名前が付けられ、conn文字列のサーバー名は次のようになります。.\SQLEXPRESS
  • サーバーはリモート接続を許可するように構成されていますか?
    • Server=.;Database=master;Trusted_Connection=True;
    • Server=(local);Database=master;Trusted_Connection=True;
    • Server=127.0.0.1;Database=master;Trusted_Connection=True;
  • と...あなたのSQL Serverが実行されていますしようとする
  • オプションの接続文字列を(エラーメッセージを読んで)?

は、エラーを解析:SQL Serverへの接続を確立しながら

  • ネットワーク関連またはインスタンス固有のエラーが発生しました。
  • サーバーが見つからなかったか、アクセスできませんでした。
  • インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。
  • (プロバイダ:名前付きパイププロバイダ、エラー:40 - SQL Serverへの接続を開けませんでした) "}

コマンドが機能しなかったことを前提としないでください、エラーが明示的であると述べています。接続の問題ではなく、SQL構文やその他の問題があります。

1

あなたCREATE DATABASE文は次のようになります。

 string str = "CREATE DATABASE " + DEF_DB_NAME + " ON PRIMARY " + 
      "(NAME = N'" + DEF_DB_NAME + "_Dat', " + 
      "FILENAME = 'C:\\somepath\\" + DEF_DB_NAME + ".mdf', " + 
      "SIZE = 10MB, MAXSIZE = 10MB, FILEGROWTH = 10%) " + 
      "LOG ON (NAME = N'" + DEF_DB_NAME + "_Log', " + 
      "FILENAME = 'C:\\somepath\\" + DEF_DB_NAME + "Log.ldf', " + 
      "SIZE = 1MB, " + 
      "MAXSIZE = 5MB, " + 
      "FILEGROWTH = 10%)"; 

はテストされ、100%に動作します。 (あなたはいくつかの場所で引用符が欠けていた)

モデルデータベースのサイズに応じて、データファイルの最初のサイズを大きくする必要があるかもしれません。

データベースファイルのデフォルトパスはC:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\ です[これが本番データベースの場合、ログとデータファイルは異なる(適切なRAIDレベル)にする必要があります。ドライブ...]

関連する問題