首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

执行insert into 插入语句,插入成功,但返回受影响的行数为-1?该如何处理

2012-05-21 
执行insert into 插入语句,插入成功,但返回受影响的行数为-1???奇怪了 ,以前做项目开发,执行insert into

执行insert into 插入语句,插入成功,但返回受影响的行数为-1???
奇怪了 ,以前做项目开发,执行insert into 插入语句,插入成功,返回受影响的行数就不会是-1,可现在用同样的语句,返回受影响的行数却为-1了。。。。。。我们开发团队的也有人遇到这问题!
   
  //int hs = cmd.ExecuteNonQuery(); 这样获得的受影响的行数为-1!!!
我还用返回刚刚插入数据返回的id show出来, 没有问题,数据库数据正常。
代码:

C# code
 cmd1 = " exec CheLiang_CheDui_Che_ChaRuCheXinXi'" + cddm + "','" + cph + "','" + ztdm + "','" + zzgg + "','" + cx + "','" + zzhy + "','" + kchy+ "','" + fdjh + "','" + cjh + "','" + dph + "','" + bz + "','" + lrrdm + "'";                con.Open();                cmd.CommandText = cmd1;                //SqlCommand cmd = new SqlCommand(cmd1,con);                cmd.Connection = con;                //int hs = cmd.ExecuteNonQuery();   //当用这语句的时候执行成功,但返回的还是-1哦                int id= Convert.ToInt32(cmd.ExecuteScalar());//当用这语句的时候一样可以执行成功,返回的id也是对的呢                //MessageBox.Show(hs.ToString());                if (hs > 0)//像这里用行数判断就不行了!用返回的id没有问题                {                                   }                else { MessageBox.Show("数据库异常!", "系统提示"); }//提示失败                con.Close(); 


  网上找了下,说现在用返回受影响的行数判断是不行了。。。为啥了呢?



[解决办法]
下标越界?????
[解决办法]
存储过程返回受影响行数了吗? 应该在存储过程最后一句返回受影响行数
[解决办法]
不会吧,我可以啊,是不是你调用存储过程的方式不对?
[解决办法]
尽量启动事务,最后返回执行结果及影响行数。
[解决办法]
添加参数,调用存储过程
ExeuteNoQuery()只对Update,Insert,Delete语句是返回修改行数的 
对于 UPDATE、INSERT 和 DELETE SQL 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1 
一定不要使用 SET NOCOUNT ON 

[解决办法]
using(SqlConnection conn = new SqlConnection(""))
{
SqlCommand cmd = new SqlCommand("p_Add", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Name", Name);

conn.Open();
cmd.ExecuteNonQuery();

}

[解决办法]
学习了
[解决办法]
你在sql
下面执行看下是什么结果
[解决办法]
没有碰到数据修改成功还返回影响 行为-1,奇怪。
[解决办法]

[解决办法]
打补丁吧
奇怪的问题啊
[解决办法]

[解决办法]
学习了
[解决办法]
C#中调用存储过程不是那样调用的,你只需要给个存储过程名,然后提供参数。否则视为一般SQL语句,所以你看不到影响行数。
[解决办法]
打开Sql管理器,选择服务器属性(服务器上点右键出来个包含属性的菜单),在右侧选择连接,左侧有个列表,看看里面的no count是不是被选中了?
[解决办法]
在插入的存储过程结尾处应该加入:return @@rowcount 吧。。
我以前也遇到过。
------解决方案--------------------


你是不是使用了SQL中的关键字啊,使用了关键字之后,虽然插入成功,但是却显示失败。你把字段用[]括起来试试。
[解决办法]
是不是写方法的时候,在return的时候加了"-"号啊.
[解决办法]
int id= Convert.ToInt32(cmd.ExecuteScalar());//
这个ExecuteScalar方法是返回第一行,第一列的数据. 你只是插入语句, 当然没有值, 

cmd.ExecuteNonQuery(); 这个返回影响行!
[解决办法]

C# code
   int id= cmd.ExecuteNonQuery();
[解决办法]
貌似以前也遇到过类似问题,关注,帮顶!
[解决办法]
注意参数赋值时候,和sql语句时候的一致性...
[解决办法]
学习了!
[解决办法]
我看到了一颗闪耀的钻石。。。。。。Oh~~~My God~~~~~~~~~~~~`
[解决办法]

[解决办法]
你这个根本不对,存储过程可以是很复杂的事物,比如表1加5列然后表2加10列,那你说返回5还是返回10啊?你把存储过程和insert搞混了。
[解决办法]
关注一下。。
[解决办法]
探讨
添加参数,调用存储过程
ExeuteNoQuery()只对Update,Insert,Delete语句是返回修改行数的
对于 UPDATE、INSERT 和 DELETE  SQL 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1
一定不要使用 SET NOCOUNT ON


[解决办法]
我也遇到过哦,不过我后来不理它了,反正没事

热点排行