我正在尝试在sql表中搜索特定字符串,并返回找到的观察数。但是,无论字符串是否在表中,它都会继续返回-1
。这是我的代码:
@{
Layout = "~/_Layout.cshtml";
Page.title = "TestArea";
var db = Database.Open("Cafeen");
string SearchWord = "Jolly";
var msg = db.Execute("SELECT COUNT(*) FROM Products WHERE ProductName = @SearchWord");
}
<p>@msg</p>
我是否应该使用COUNT(*)
之外的其他内容? -1
有什么意义?如果无法找到字符串,我会假设表达式返回0
。
答案 0 :(得分:1)
您正在使用WebMatrix.Data命名空间。在这种情况下,您应该调用QuerySingle方法而不是Execute方法,因为正如许多人已经说过的那样,该方法不用于返回行数据。
Execute方法用于在a上执行非查询命令 数据库,例如SQL Drop,Create,Delete,Update和Insert 命令。
此外,我建议将查询语句更改为更高性能的
var db = Database.Open("Cafeen");
string SearchWord = "Jolly";
string cmdText = @"IF EXISTS(SELECT 1 FROM Products
WHERE ProductName = @searchWord)
SELECT 1 ELSE SELECT 0";
int exists = Convert.ToInt32(db.QuerySingle(cmdText, SearchWord));
.....
答案 1 :(得分:0)
在db.Execute
和SqlCommand.ExecuteNonQuery
:
对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。对于所有其他类型的语句,如 SELECT ,返回值为-1。如果发生回滚,则返回值也为-1。
看看以下链接可能会有所帮助:
https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx
How to Identify whether SQL job is successfully executed or not in C#
答案 2 :(得分:0)
与SQL数据库相关,有:
SqlCommand.ExecuteScalar Method ()
否则,请参阅Database.QueryValue
方法(re:https://msdn.microsoft.com/en-us/library/webmatrix.data.database.queryvalue(v=vs.111).aspx)
两种方法都从第一列/第一行返回标量值。
此外,您可以使用COUNT(*)
代替COUNT(1)
在SQL语句中获得更好的性能。
希望这可能会有所帮助。