日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法!

發布時間:2023/11/27 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天遇到個表態的問題!使用帶事務的存儲過程執行sql語句,看數據庫里面插入更新都正常! 但是返回值一直為-1! 頭那個大哦!先貼2個存儲過程吧!看大俠們能否找到問題的存在

USE [My_DB]
GO
/****** Object: StoredProcedure [dbo].[UpdatePointByUser] Script Date: 03/29/2010 16:06:23 ******/
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
-- =============================================
-- Author:jinho
-- Create date: 2010年3月22日16:13:06
-- Description: 修改用戶的點數 [Point]
-- =============================================
CREATE PROCEDURE [dbo].[UpdatePointByUser]
? @point int = 0,
? @uid int =0
AS BEGIN
?? SET NOCOUNT ON;
?? declare @error int ;
?? set @error = 0;
?? begin tran
??????? update UserInfo set Point = Point + @point where Id = @uid;
??????? set @error = @error+@@error ;
??????? if(@error=0)
??????????? commit tran ;
??????? else
??????????? rollback tran ;
?? END
//
USE [My_DB]
GO
/****** Object: StoredProcedure [dbo].[AddAnnouncement] Script Date: 03/29/2010 15:43:51 ******/
SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[AddAnnouncement]
??? @ATitle nvarchar(max) ='',
??? @ACreateTime datetime ='',
??? @AWhere nvarchar(max) = '',
??? @AUserId int =0,
??? @point int =0
AS BEGIN
??? SET NOCOUNT ON;
??? declare @error int ;
??? set @error = 0;
??? begin tran
??????? insert into Announcements values(@ATitle,@ACreateTime,@AWhere,@AUserId);
??????? set @error = @error+@@error;
??????? exec UpdatePointByUser @point,@AUserId
??????? set @error = @error+@@error;
??????? if(@error=0) commit tran ;
??????? else rollback tran;
END

-- Test
declare @rev int
exec [AddAnnouncement] 'mytest','2008-05-09','ChengDu',13,100
print @rev;
print @@ROWCOUNT

這里測試 @rev,@@ROWCOUNT 都為0;

?

C#后臺代碼測試:

代碼
 1 public bool AddAnnouncement(Model announcement)
2 {
3 SqlConnection con = null;
4 SqlCommand cmd = null;
5 int row = 0;
6 SqlParameter[] paras = {
7 new SqlParameter("@ATitle", announcement.ATitle),
8 new SqlParameter("@ACreateTime", announcement.ACreateTime),
9 new SqlParameter("@AWhere", announcement.AWhere),
10 new SqlParameter("@AUserId", announcement.AUserId),
11 new SqlParameter("@point", 1) };
12 try
13 {
14 using (con = new SqlConnection(DBHelper.DefaultConnectionString))
15 {
16 con.Open();
17 using (cmd = new SqlCommand("[AddAnnouncement]", con))
18 {
19 cmd.CommandType = CommandType.StoredProcedure;
20 cmd.Parameters.AddRange(paras);
21 row = cmd.ExecuteNonQuery();
22 return row > 0;
23 }
24 }
25 }
26 catch (Exception ex) { throw ex; }
27 finally
28 {
29 if (con != null) con.Close();
30 }
31 }

上面代碼的Row返回為-1! 但是我去數據庫看,執行存儲過程的兩條語句都成功了!
嘿嘿:注意看到上面的存儲過程的“SET NOCOUNT ON;”這句代碼!就是他在作怪!他的意思為 “開啟設置不影響的行數”!
你只要 把SET NOCOUNT OFF即可! 當然也可以不寫!因為默認為OFF!如果你看到默認為ON時請修改為OFF!
OK![也許這個問題本身不變態,只是我的技術不到位,:)]

上面代碼的Row返回為-1! 但是我去數據庫看,執行存儲過程的兩條語句都成功了! 嘿嘿:注意看到上面的存儲過程的“SET NOCOUNT ON;”這句代碼!就是他在作怪!他的意思為 “開啟設置不影響的行數”!你只要 把SET NOCOUNT OFF即可! 當然也可以不寫!因為默認為OFF!如果你看到默認為ON時請修改為OFF! OK!

?

轉載于:https://www.cnblogs.com/jinho/archive/2010/03/29/1700149.html

總結

以上是生活随笔為你收集整理的使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。