【问题标题】:Search for string in SQL table unsuccessful在 SQL 表中搜索字符串不成功
【发布时间】:2016-03-25 09:58:21
【问题描述】:

我正在尝试在 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

【问题讨论】:

  • 您实际上并没有将 SearchWord 字符串传递给那里的 db.Execute() 调用,是吗?
  • 尝试 var msg = db.Execute("SELECT COUNT(*) FROM Products WHERE ProductName = '"+ SearchWord+"'");
  • @Jamaxack 小心。如果该字符串是用户输入,则您要求的是 Bobby Tables 场景。
  • 不要忘记将参数放在单引号之间:db.Execute("SELECT COUNT(*) FROM Products WHERE ProductName = '"+ SearchWord + "'");
  • @Nyerguds 是的,你是对的,但在这个例子中我认为问题很明显

标签: c# sql asp.net-mvc webmatrix


【解决方案1】:

您正在使用 WebMatrix.Data 命名空间。在这种情况下,您应该调用 QuerySingle 方法而不是 Execute 方法,因为正如许多人已经说过的那样,该方法用于不返回行数据。

Execute 方法用于在一个对象上执行非查询命令 数据库,例如 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));
.....

【讨论】:

    【解决方案2】:

    与SQL数据库相关,有:

    SqlCommand.ExecuteScalar Method ()
    

    (回复:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx

    否则,参考Database.QueryValue方法(回复:https://msdn.microsoft.com/en-us/library/webmatrix.data.database.queryvalue(v=vs.111).aspx

    这两种方法都从第一列/第一行返回一个标量值。

    此外,您可以使用COUNT(1) 代替 SQL 语句中的 COUNT(*) 以获得更好的性能。

    希望这会有所帮助。

    【讨论】:

    • OP 正在使用来自WebMatrixDatabase 类。
    【解决方案3】:

    db.ExecuteSqlCommand.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#

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多