1

私が学校向けに作成している小さなアプリケーションで、必要なデータベースが存在するかどうかを判断しようとしています。

そうでない場合は、(データベース内のテーブルと一緒に)作成して、通常どおりに使用します。

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

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()行に到達すると、nearの構文"GO"が正しくないことがわかりますが、SQL ServerManagementStudioの「ScriptAsCREATETO」機能を使用してデータベース/テーブルを作成するためのテキストをコピーしました。

私がこの問題に遭遇した理由を誰かが知っていますか?

どうもありがとう。

4

2 に答える 2

4

GOはSQLServerコマンドではなく、ManagementStudioによって解釈されます。同じ動作を実現したい場合は、sqlコマンドをgo命令で分割し、各部分を順番に実行する必要があります。

于 2012-04-12T13:13:58.363 に答える
1

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

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

于 2012-04-12T13:13:47.950 に答える