C#SQL Server'Use <database>'在COnnection String </database>中指定“Initial Catalog”时需要

时间:2013-10-17 04:17:35

标签: c# sql sql-server

我有一个连接字符串连接到C#中的数据库。哪个有效,我能够读/写数据库。但是我试图使用命令

获取表名
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = FC_TABLE;

当我在SQL Server查询中使用此命令时,我必须使用“USE DatabaseName GO”指向DB,这一切都很好。如果没有,则查询Master,我得到一个空的返回值。

然而,当我在C#SqlReader中使用这个字符串时,我已经将'初始目录'设置为数据库,我会在我的连接字符串中指向USE,所以它不应该在那里默认吗?我得到相同的空返回值,但无法弄清楚为什么除非我必须使用USE。但是我在编写数据方面没有问题。

3 个答案:

答案 0 :(得分:2)

这对我有用。 piv是我的表名

using (SqlConnection conn = new SqlConnection("Data Source=localhost;Initial Catalog=temp;User ID=sa"))
        {
            conn.Open();

            SqlCommand command = conn.CreateCommand();
            command.CommandText = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'piv';";

            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    string x = reader.GetString(0);
                }
            }
        }

答案 1 :(得分:1)

SQL查询编辑器中使用

USE DATABASE_NAME,其中USE语句下面的所有代码行都将在该特定数据库中执行。在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));
                }
            }
        }

答案 2 :(得分:0)

将您的查询更改为此。删除GO并使用分号终止查询;

var sql =@" Use Master
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =@FC_DATASET;"
command.Parameters.AddWithValue("@FC_Dataset",yourTable);