【问题标题】:why com.ExecuteNonQuery() return -1 Always . in all cases为什么 com.ExecuteNonQuery() 总是返回 -1 。在所有情况下
【发布时间】:2015-11-11 20:24:38
【问题描述】:

com.ExecuteNonQuery() 在所有情况下总是返回 -1。

为什么总是 = -1?

SqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["UsersConnectionString"].ConnectionString);

conn.Open();

string insertquery = " select UserName from Users where Username='" + CurrentName + "' ";

SqlCommand com = new SqlCommand(insertquery, conn);
com.ExecuteNonQuery();

int ii = com.ExecuteNonQuery();

Response.Write(ii);

【问题讨论】:

  • 你为什么要给ExecuteNonQuery打两次电话?当它一个查询时,你为什么打电话给ExecuteNonQuery?当它只是一个选择查询时,你为什么称它为insertquery?那里没有插入...
  • 即使我调用了一次:在所有情况下也返回 -1
  • 当它确实包含SELECT时为什么叫insertquery
  • 您正在使用ExecuteNonQuery,但您想SELECT 某事(即IS 查询!)请使用正确的查询功能。例如ExecuteScalar()

标签: c# asp.net sql-server database-connection executenonquery


【解决方案1】:

这是因为您将它与SELECT SQL 命令一起使用。

来自SqlCommand.ExecuteNonQuery 的文档(强调我的):

对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。 对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也是-1。

目前尚不清楚您要达到的目标,但这基本上不是实现目标的方法。

【讨论】:

  • 谢谢我不知道
  • @محmorph
【解决方案2】:

您正在使用选择查询,因此结果将始终为 -1。

对于 UPDATE、INSERT 和 DELETE 语句,返回值为 受命令影响的行数。当触发器存在于 正在插入或更新的表,返回值包括数字 受插入或更新操作和数量影响的行数 受触发器或触发器影响的行数。对于所有其他类型的 语句,返回值为-1。

【讨论】:

    【解决方案3】:
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["UsersConnectionString"].ConnectionString);
    conn.Open();
    string query = "select UserName from Users where lower(Username)=lower('" + CurrentName + "')";
    SqlCommand com = new SqlCommand(query, conn);
    string result = "";
    result = com.ExecuteScalar() == null ? "" : com.ExecuteScalar().ToString();
    conn.Close();
    Response.Write(result);
    

    试试这个

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2011-11-17
      • 2020-08-19
      相关资源
      最近更新 更多