我有一个连接字符串连接到C#中的数据库。哪个有效,我能够读/写数据库。但是我试图使用命令
获取表名SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = FC_TABLE;
当我在SQL Server查询中使用此命令时,我必须使用“USE DatabaseName GO”指向DB,这一切都很好。如果没有,则查询Master,我得到一个空的返回值。
然而,当我在C#SqlReader中使用这个字符串时,我已经将'初始目录'设置为数据库,我会在我的连接字符串中指向USE,所以它不应该在那里默认吗?我得到相同的空返回值,但无法弄清楚为什么除非我必须使用USE。但是我在编写数据方面没有问题。
答案 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)
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);