C# SQL Server“使用<数据库>”在连接字符串中指定“初始目录”时需要

本文关键字:初始目录 字符串 使用 Server SQL 数据库 连接 | 更新日期: 2023-09-27 18:35:46

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

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = FC_TABLE;

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

但是,当我在 C# SqlReader 中使用此字符串时,我已经将"初始目录"设置为数据库,我通常会在我的连接字符串中使用 USE 指向,所以它不应该在那里默认吗? 我得到了相同的空返回值,但除非我必须使用 USE,否则无法弄清楚原因。 但是我在写入数据时没有问题。

C# SQL Server“使用<数据库>”在连接字符串中指定“初始目录”时需要

这对

我有用。 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);
                }
            }
        }
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));
                }
            }
        }

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

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