遇到一个灰常纠结的问题.....

yangdaboke 2012-05-15 08:41:43

这是一个自定义方法:
    public static int UpdataSql(string sql)
{

SqlConnection SqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString);
SqlCon.Open();
SqlCommand SqlCom = new SqlCommand(sql, SqlCon);
return SqlCom.ExecuteNonQuery();
SqlCon.Close();
}


返回值为受影响的行数。

我在SQLSERVER里使用查询的时候 SQL语法也没错,也能查到。
可是 :
以下是button按钮的事件代码,主要目的是判断是否查到了值,如果没有就弹出没有查到内容的相关提示
int s = Sql.InsertSql(strsql);
if (s > 0).....


问题就是,这个s的值却始终是 -1,导致每次都查询不到想要的结果。
我想知道,这是为什么?
...全文
74 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangdaboke 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
执行ExecuteNonQuery时,只有insert,update,delete才返回行数哦!
select返回行数应该是:
public static int UpdataSql(string sql)
{
SqlConnection SqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["Con……
[/Quote]

哥,谢谢你了,按照你说的,我解决了问题。
lvyichang 2012-05-15
  • 打赏
  • 举报
回复
执行ExecuteNonQuery时,只有insert,update,delete才返回行数哦!
select返回行数应该是:
public static int UpdataSql(string sql)
{
SqlConnection SqlCon = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString);
SqlCon.Open();
SqlCommand SqlCom = new SqlCommand(sql, SqlCon);
//return SqlCom.ExecuteNonQuery();
int n = Convert.ToInt16(SqlCom.ExecuteScalar());
SqlCon.Close();
return n;
}

调用:
int i = UpdataSql("select count(*) from 表 where ....");

还有你代码中的关闭连接根本没作用,因为之前已return了!
yangdaboke 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
楼主,你给一个叫做 UpdataSql 的方法传 select 语句,让人说啥好呢


如果是 select count ... 之类返回单个值的select,用 ExecuteScalar,如果是返回行,用 DataAdapter.Fill
[/Quote]

不是啊,我想方便,就拿来用啊,那样就不用另外写了。
theillusion 2012-05-15
  • 打赏
  • 举报
回复
楼主,你给一个叫做 UpdataSql 的方法传 select 语句,让人说啥好呢


如果是 select count ... 之类返回单个值的select,用 ExecuteScalar,如果是返回行,用 DataAdapter.Fill
yuji821 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

具体来说,返回什么方法,能让我知道,select查询语句有结果啊? 坐等围观中...
[/Quote]

你是select语句的话,不用 ExecuteNonQuery了吧,而是要填充中datable中做判断吧
yangdaboke 2012-05-15
  • 打赏
  • 举报
回复
具体来说,返回什么方法,能让我知道,select查询语句有结果啊? 坐等围观中...
yangdaboke 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
这是 msdn 对 ExecuteNonQuery 返回值的说明:

对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
[/Quote]

我的是select 语句,怪不得返回值为-1. 请问有什么办法判断select查询是否有数据呢?
theillusion 2012-05-15
  • 打赏
  • 举报
回复
这是 msdn 对 ExecuteNonQuery 返回值的说明:

对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。
theillusion 2012-05-15
  • 打赏
  • 举报
回复
返回之前把连接关掉
古龙老子 2012-05-15
  • 打赏
  • 举报
回复
代码和sql 语句贴上来才知道的
yangdaboke 2012-05-15
  • 打赏
  • 举报
回复
我断点试了一下,返回的值就是 -1,我怀疑是我的自定义的函数有问题,请大家帮我看下,有没有办法能返回查询结果的条数啊。

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧