0

C# でデータベースに接続するための接続文字列があります。これは機能し、データベースの読み取り/書き込みができます。ただし、コマンドを使用してテーブル名を取得しようとしています

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = FC_TABLE;

このコマンドを SQL Server クエリで使用する場合、'USE DatabaseName GO' を使用して DB を指定する必要がありますが、これは問題ありません。そうでない場合は、マスターにクエリを実行し、空の戻り値を取得します。

ただし、C# SqlReader でこの文字列を使用すると、接続文字列で USE を使用して通常は指すデータベースに「初期カタログ」が既に設定されているため、デフォルトに設定しないでください。同じ空の戻り値を取得していますが、USE を使用する必要がない限り、その理由を理解できません。しかし、それ以外の場合、データの書き込みに問題はありません。

4

3 に答える 3

1

USE DATABASE_NAMEUSEステートメントの下のすべてのコード行がその特定のデータベースで実行される SQL クエリエディターで使用されます。C# で特定のデータベースを使用して接続文字列を作成すると、クエリでデータベースを明示的に指定しない限り、ユーザーはそのデータベースに対してのみ操作を実行できます。

using(SqlConnection connection = new SqlConnection("server=.;Integrated Security=SSPI;Database=MyDB"))
        {
            string query = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Resource';";
            SqlCommand cmd = new SqlCommand(query, connection);
            connection.Open();
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine(reader.GetString(0));
                }
            }
        }
于 2013-10-17T05:01:47.797 に答える