道歉,如果这个问题已在其他地方得到解答,但我已经四处看看并且没有运气。我正在尝试使用mvc3和c#来确定数据库表是否已存在。
我将以下sql放入resx文件中调用:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[%tableName%]') AND type in (N'U'))
SELECT 1
ELSE
SELECT 0
这在Management Studio中运行正常,但是我无法在我的c#项目中使用它,我尝试这样调用它:
public bool GetIsInstalled(string tableName)
{
return _db.ExecuteCommand(Scripts.CheckIfInstalled.Replace("%tableName%", tableName))==1;
}
当我调试方法时,返回的值实际上是-1,所以我想某处出了问题?我在想,我可能需要执行查询而不是命令?有人可以帮我解决这个问题,请尽可能提供代码示例吗?
答案 0 :(得分:1)
ExecuteCommand方法返回已执行命令修改的行数。在这种情况下,这不是你想要的。相反,您应该使用ExecuteQuery方法:
return db.ExecuteQuery<int>(
Scripts.CheckIfInstalled.Replace("%tableName%", tableName)
).Single().Equals(1);
答案 1 :(得分:0)
尝试这个更简单的查询:
SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[%tableName%]') AND type in (N'U')
另外,请检查连接字符串中指定的用户是否可以访问systables。
答案 2 :(得分:0)
我不知道您使用的是哪种数据库接口,但是如果您使用的是System.Data.SqlClient.SqlCommand,那么您可以执行类似
的操作object result = cmd.ExecuteScalar();
顺便说一下:你可以使用:
SELECT COUNT(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[%tableName%]') AND type=N'U';