C# 从c查询SQL Server 2008 R2中的master.sys.databases视图不起作用
我使用下面的代码查找数据库是否存在,但ExecuteOnQuery始终返回-1 我已经看到master.sys.databases视图,它有数据库POS ExecuteOnQuery使用的方法不正确。改用ExecuteReader:例如:C# 从c查询SQL Server 2008 R2中的master.sys.databases视图不起作用,c#,sql-server,master,C#,Sql Server,Master,我使用下面的代码查找数据库是否存在,但ExecuteOnQuery始终返回-1 我已经看到master.sys.databases视图,它有数据库POS ExecuteOnQuery使用的方法不正确。改用ExecuteReader:例如: var reader = command.ExecuteReader(); if (reader.Read()) .... ExecuteOnQuery使用的方法不正确。改用ExecuteReader:例如: var reader = command
var reader = command.ExecuteReader();
if (reader.Read())
....
ExecuteOnQuery使用的方法不正确。改用ExecuteReader:例如:
var reader = command.ExecuteReader();
if (reader.Read())
....
您应该使用ExecuteScalar并将查询更改为运行计数*
ExecuteScalar将返回受影响的行
ExecuteOnQuery将为SELECT返回-1。您应该使用ExecuteScalar并将查询更改为运行计数*
ExecuteScalar将返回受影响的行
ExecuteOnQuery将为SELECT返回-1
你为什么在这里用反斜杠?数据库的名称为aspnetdb,因此应为:
sqlCheckDBQuery = "SELECT * FROM master.sys.databases where name = 'aspnetdb'";
正如在其他答案中提到的,您不能在这里使用,因为对于select语句,它将始终返回-1
你为什么在这里用反斜杠?数据库的名称为aspnetdb,因此应为:
sqlCheckDBQuery = "SELECT * FROM master.sys.databases where name = 'aspnetdb'";
正如在其他答案中提到的,您不能在这里使用,因为对于select语句,它将始终返回-1。在这个特定实例中,您可以使用标量查询而不是数据读取器
sqlCheckDBQuery = "SELECT count(1) FROM master.sys.databases where name = 'aspnetdb'";
var count = (int)sqlCmd.ExecuteScalar();
databaseExists = count > 1;
在此特定实例中,您可以使用标量查询而不是数据读取器
sqlCheckDBQuery = "SELECT count(1) FROM master.sys.databases where name = 'aspnetdb'";
var count = (int)sqlCmd.ExecuteScalar();
databaseExists = count > 1;
但是is仍然返回0行,它应该返回1row@UzairFarooq从name=\'aspnetdb\'的master.sys.databases中删除SELECT*的反斜杠,这样它会从name='aspnetdb'但仍返回0行的master.sys.databases中读取SELECT*,它应该返回1row@UzairFarooq从name=\'aspnetdb\'的master.sys.databases中删除SELECT*的反斜杠,这样它就会从name='aspnetdb'+1 ExecuteScalar的master.sys.databases中读取SELECT*。我完全忘记了。+1 ExecuteScalar是这里的方式。我完全忘记了它。这就像一个符咒,但我想知道为什么SqlDataReader没有返回任何行我用ExecuteReader尝试了它。这就像一个符咒,但我想知道为什么SqlDataReader没有返回任何行我用ExecuteReader尝试了它