2012-04-12 7 views
1

私は学校のために作っている小さなアプリケーションで、必要なデータベースが存在するかどうかを判断しようとしています。C#とのSQL Server接続 - >データベースは存在しますか?

もしそうでなければ、私はそれを(データベース内のテーブルと一緒に)作成し、それを通常通り使用したいと思います。

私はVisual C#Express EditionとSQL Server Expressを使用しています。私は以下の小さなテストプログラムを書いた...

namespace DatabaseConnectionTest 
{ 
    class Program 
    { 
     public static SqlConnection con; 

     public static void EstablishConnection() 
     { 
      string userName = "username"; 
      string password = "password"; 
      string server = @".\SQLEXPRESS"; 
      string database = "Blibbity"; 
      string trustedConnection = "yes"; 
      string timeout = "30"; 

      try 
      { 
       con = new SqlConnection(
         "user id=" + userName + 
         ";password=" + password + 
         ";server=" + server + 
         ";Trusted_Connection=" + trustedConnection + 
         ";database=" + database + 
         ";connection timeout=" + timeout); 
       con.Open(); 
       Console.WriteLine("Connection successful!"); 

       var command = new SqlCommand("insert into sometable values ('somedata')", con); 
       command.ExecuteNonQuery(); 
       Console.WriteLine("Insert successful!"); 

       command = new SqlCommand("select somecolumn from sometable", con); 
       SqlDataReader reader = command.ExecuteReader(); 

       while (reader.Read()) 
       { 
        Console.WriteLine("Fectched data ====> " + reader["somecolumn"].ToString()); 
       } 

       reader.Close(); 
       Console.WriteLine("Query successful!"); 

       command = new SqlCommand("delete from sometable where somecolumn = 'somedata'", con); 
       command.ExecuteNonQuery(); 
       Console.WriteLine("Delete successful!"); 
      } 
      catch 
      { 
       database = "master"; 

       con = new SqlConnection(
        "user id=" + userName + 
        ";password=" + password + 
        ";server=" + server + 
        ";Trusted_Connection=" + trustedConnection + 
        ";database=" + database + 
        ";connection timeout=" + timeout); 

       con.Open(); 

       var command = new SqlCommand(@" 
        USE [master] 
        GO 

        /****** Object: Database [Blibbity] Script Date: 04/12/2012 07:08:45 ******/ 
        CREATE DATABASE [Blibbity] ON PRIMARY 
        (NAME = N'Blibbity', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Blibbity.mdf' , SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
        LOG ON 
        (NAME = N'Blibbity_log', FILENAME = N'c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Blibbity_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%) 
        GO 

        ALTER DATABASE [Blibbity] SET COMPATIBILITY_LEVEL = 100 
        GO 

        IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')) 
        begin 
        EXEC [Blibbity].[dbo].[sp_fulltext_database] @action = 'enable' 
        end 
        GO 

        ALTER DATABASE [Blibbity] SET ANSI_NULL_DEFAULT OFF 
        GO 

        ALTER DATABASE [Blibbity] SET ANSI_NULLS OFF 
        GO 

        ALTER DATABASE [Blibbity] SET ANSI_PADDING OFF 
        GO 

        ALTER DATABASE [Blibbity] SET ANSI_WARNINGS OFF 
        GO 

        ALTER DATABASE [Blibbity] SET ARITHABORT OFF 
        GO 

        ALTER DATABASE [Blibbity] SET AUTO_CLOSE OFF 
        GO 

        ALTER DATABASE [Blibbity] SET AUTO_CREATE_STATISTICS ON 
        GO 

        ALTER DATABASE [Blibbity] SET AUTO_SHRINK OFF 
        GO 

        ALTER DATABASE [Blibbity] SET AUTO_UPDATE_STATISTICS ON 
        GO 

        ALTER DATABASE [Blibbity] SET CURSOR_CLOSE_ON_COMMIT OFF 
        GO 

        ALTER DATABASE [Blibbity] SET CURSOR_DEFAULT GLOBAL 
        GO 

        ALTER DATABASE [Blibbity] SET CONCAT_NULL_YIELDS_NULL OFF 
        GO 

        ALTER DATABASE [Blibbity] SET NUMERIC_ROUNDABORT OFF 
        GO 

        ALTER DATABASE [Blibbity] SET QUOTED_IDENTIFIER OFF 
        GO 

        ALTER DATABASE [Blibbity] SET RECURSIVE_TRIGGERS OFF 
        GO 

        ALTER DATABASE [Blibbity] SET DISABLE_BROKER 
        GO 

        ALTER DATABASE [Blibbity] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
        GO 

        ALTER DATABASE [Blibbity] SET DATE_CORRELATION_OPTIMIZATION OFF 
        GO 

        ALTER DATABASE [Blibbity] SET TRUSTWORTHY OFF 
        GO 

        ALTER DATABASE [Blibbity] SET ALLOW_SNAPSHOT_ISOLATION OFF 
        GO 

        ALTER DATABASE [Blibbity] SET PARAMETERIZATION SIMPLE 
        GO 

        ALTER DATABASE [Blibbity] SET READ_COMMITTED_SNAPSHOT OFF 
        GO 

        ALTER DATABASE [Blibbity] SET HONOR_BROKER_PRIORITY OFF 
        GO 

        ALTER DATABASE [Blibbity] SET READ_WRITE 
        GO 

        ALTER DATABASE [Blibbity] SET RECOVERY SIMPLE 
        GO 

        ALTER DATABASE [Blibbity] SET MULTI_USER 
        GO 

        ALTER DATABASE [Blibbity] SET PAGE_VERIFY CHECKSUM 
        GO 

        ALTER DATABASE [Blibbity] SET DB_CHAINING OFF 
        GO", con); 

       command.ExecuteNonQuery(); 
       con.Close(); 

       database = "Blibbity"; 

       con = new SqlConnection(
        "user id=" + userName + 
        ";password=" + password + 
        ";server=" + server + 
        ";Trusted_Connection=" + trustedConnection + 
        ";database=" + database + 
        ";connection timeout=" + timeout); 

       con.Open(); 

       command = new SqlCommand(@" 
        USE [Blibbity] 
        GO 

        /****** Object: Table [dbo].[sometable] Script Date: 04/12/2012 07:09:07 ******/ 
        SET ANSI_NULLS ON 
        GO 

        SET QUOTED_IDENTIFIER ON 
        GO 

        SET ANSI_PADDING ON 
        GO 

        CREATE TABLE [dbo].[sometable](
         [somecolumn] [varchar](50) NULL 
        ) ON [PRIMARY] 

        GO 

        SET ANSI_PADDING OFF 
        GO", con); 

       command.ExecuteNonQuery(); 
       con.Close(); 

       EstablishConnection(); 
      } 
      finally 
      { 
       con.Close(); 
       Console.WriteLine("Connection now closed..."); 
       Console.ReadLine(); 
      } 
     } 

     static void Main(string[] args) 
     { 
      EstablishConnection(); 
     } 
    } 
} 

明らかにBlibbityは単なるジャンクデータベースです。例外キャッチの最初のExecuteNonQuery()行をヒットしたとき、"GO"に近い構文が間違っていますが、SQL Server Management Studioの "Script As CREATE TO"機能を使用して、データベース/テーブル作成のテキストをコピーしました。

なぜこの問題に遭遇しているのですか?

多くのありがとうございます。

+1

サイドヒント:一連のパラメータから接続文字列を作成する場合は、['SqlConnectionStringBuilder'](http://msdn.microsoft.com/en-us/library/system)を使用します。 data.sqlclient.sqlconnectionstringbuilder.aspx)クラスで、このケース専用に設計されています。 –

答えて

4

GOはSQL Serverコマンドではありません。これはManagement Studioによって解釈されます。同じ動作を実現したい場合は、sqlコマンドをgo命令で分割し、各パーツを順番に実行する必要があります。

1

データベースを手動で作成する代わりに、コード・ファースト・アプローチでは、存在しない場合は新しいデータベースを作成するための組み込みサポートが組み込まれており、テーブルを追加したり、初期データを入力することもできます。

したがって、問題の解決策を探す代わりに、問題自体を削除することができます。

関連する問題