我使用存储过程来插入,更新和删除记录,我使用LINQ来执行或调用过程。 单击提交按钮后,更新过程已执行,但表中没有变化! 如果我传递一个像“杰克”而不是fname_txt.text的值,它会工作并更新。 我不知道文本框对象和引号中的值有什么不同?! 这是代码:
protected void submit_Click(object sender, EventArgs e)
{
try
{
ZobLinqDataContext db = new ZobLinqDataContext();
string pasword = CryptorEngine.Encrypt(pass_txt.Text, true);
long uid = Convert.ToInt64(Request["uid"]);
db.pUpZDBUser(uid,
uname_txt.Text,
pasword,
fname_txt.Text.Trim(),
lname_txt.Text.Trim(),
modir.Checked,
voting.Checked,
Convert.ToInt32(Zarib_txt.Text),
false
);
db.SubmitChanges();
Response.Write(uname_txt);
}
finally
{
Session["sub"] = "1";
}
}
这是更新过程:
USE [ZOBDB]
GO
/****** Object: StoredProcedure [dbo].[pUpZDBUser] Script Date: 04/11/2012 15:17:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[pUpZDBUser]
@UID bigint,
@Uname nvarchar(100),
@Pass nvarchar(100),
@fname nvarchar(50),
@lname nvarchar(50),
@KU bit,
@KV bit,
@ZribV int,
@del bit
As
BEGIN TRANSACTION UpUser
Set NOCOUNT ON
UPDATE Users SET
Uname=@Uname,
Pass=@Pass,
fname=@fname,
lname=@lname,
KU=@KU,
KV=@KV,
ZribV=@ZribV,
del=@del
where (UID=@UID)
--RollBack if Err
IF @@ERROR != 0 and @@ROWCOUNT != 1
BEGIN
declare @msg nvarchar(30)
set @msg = ' error '+@Uname
ROLLBACK
RAISERROR(@msg,16,1)
RETURN
END
COMMIT TRANSACTION UpUser
RETURN
答案 0 :(得分:1)
如果您将SPROC更改为
,我认为您会有更多的运气--RollBack if Err
IF @@ERROR != 0 **OR** @@ROWCOUNT != 1
这样你就可以得到错误,你可以看到问题所在。 可能UID不存在?
答案 1 :(得分:0)
最好的猜测是你的proc会抛出一个你没有捕获的异常,也许是因为列上有一个长度约束,并且你的fname_txt.Text.Trim()
值是零长度,而“Jack”当然是不
在您的代码中添加一个catch块,以证明您的proc中没有发生任何不幸事件。您的问题中的更多细节也会有所帮助。