0

我有一个连接字符串来连接到 C# 中的数据库。哪个有效,我能够读/写数据库。但是我正在尝试使用命令获取表名

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = FC_TABLE;

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

但是,当我在 C# SqlReader 中使用此字符串时,我已经将“初始目录”设置为我通常会在连接字符串中使用 USE 指向的数据库,所以它不应该在那里默认吗?我得到相同的空返回值,但不知道为什么,除非我必须使用 USE。但是我在其他情况下写入数据没有问题。

4

3 回答 3

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);
                }
            }
        }
于 2013-10-17T04:53:43.080 回答
1

将您的查询更改为此。去掉 GO 并用分号终止查询;

var sql =@" Use Master
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =@FC_DATASET;"
command.Parameters.AddWithValue("@FC_Dataset",yourTable);
于 2013-10-17T04:49:15.997 回答
1

USE DATABASE_NAME在 SQL 查询编辑器中使用,其中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));
                }
            }
        }
于 2013-10-17T05:01:47.797 回答