首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >not命令参数未执行

not命令参数未执行
EN

Stack Overflow用户
提问于 2010-08-13 13:46:18
回答 3查看 1.6K关注 0票数 1

当尝试使用VB.NET、SQL和参数再次执行删除查询时,我遇到了一个奇怪的问题。

我有以下代码:

代码语言:javascript
复制
Try    
    sqlCommand.Transaction = transaction1
    sqlCommand.Connection = conn
    sqlCommand.CommandText = sqlQuery
    sqlCommand.Parameters.Add("@userID", SqlDbType.Int).Value = Convert.ToInt32(userID)
    sqlCommand.Parameters.Add("@groupID", SqlDbType.Int).Value = Convert.ToInt32(groupID)
    ''#Delete the user from the group.
    MessageBox.Show("User: " + Convert.ToString(userID) + "    Group: " + Convert.ToString(groupID))
    MessageBox.Show("Param, UserID: " + sqlCommand.Parameters.Item(0).Value.ToString)
    MessageBox.Show("Param, GroupID: " + sqlCommand.Parameters.Item(1).Value.ToString)
    return_deleteUser = sqlCommand.ExecuteNonQuery()
Catch ex As Exception
    transaction1.Rollback()
    Dim hr As Integer = Marshal.GetHRForException(ex)
    MsgBox("Removal of user from group has failed: " + ex.Message() & hr)
End Try

它执行以下SQL查询:

代码语言:javascript
复制
Dim sqlQuery As String = "DELETE FROM MHGROUP.GROUPMEMS WHERE USERNUM =@userID AND GROUPNUM =@groupID"

我的问题是,当代码执行时,根本没有报告错误。我运行了,查询没有出现在跟踪列表中。我添加的三个消息框都返回正确的值,如果要使用值对表执行SQL查询,则查询成功。userID和groupID都是3位整数.

有人能提出为什么代码不能按预期工作,或者我可以用来逐步完成代码的任何进一步调试吗?理想情况下,我希望看到已完成的SQL查询和已完成的参数,但我还没有找到如何做到这一点。

编辑:我在后面的代码中有以下内容,以检查执行是否全部成功处理:

代码语言:javascript
复制
If return_insertEvent > 0 And return_updateUser > 0 And return_nextSID > 0 And return_deleteUser > 0 Then
    MessageBox.Show("Success")
    return_removeADGroup = RemoveUserFromGroup(userID, groupName)
    MessageBox.Show("Remove FS User from AD Group: " + return_removeADGroup)
    transaction1.Commit()
    transaction2.Commit()
    transaction3.Commit()
    transaction4.Commit()
    returnResult = 1
Else
    transaction1.Rollback()
    transaction2.Rollback()
    transaction3.Rollback()
    transaction4.Rollback()
    returnResult = 0
End If

如果您需要进一步的信息,请不要犹豫,请联系我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-13 13:47:34

你错过了一个Transaction.Commit

对添加到问题中的其他信息,更新

你为什么有4笔交易?因为它们的提交和回滚都是一起执行的,所以您只需要一个事务。我建议你用TransactionScope

可以将当前事务分配给ADO.NET命令对象:

ADO.NET和System.Transactions

ADO.NET 2.0中的事务处理

票数 4
EN

Stack Overflow用户

发布于 2010-08-14 03:24:53

我可能会猜到,您的调用proc的值为userid,并向后返回。如果DELETE没有找到匹配的记录,它将成功完成,但什么也不做。我建议将您的删除包装在存储过程中。然后,可以添加代码来测试参数值是否正确通过。

代码语言:javascript
复制
Create Procedure UserDelete
@userid int, @groupID int
As
BEGIN
    Select @userid as UID, @groupID as GID INTO TESTTABLE;
    DELETE FROM MHGROUP.GROUPMEMS WHERE USERNUM =@userID AND GROUPNUM =@groupID;
END

运行您的代码,然后检查TESTTABLE的内容。

FWIW:我不喜欢把整个参数声明放在一行中。对我来说太多了。我喜欢这个..。

代码语言:javascript
复制
Dim pUID as New Parameter("@userid", SqlDbType.Int)
pUID.Value = userid
cmd.Parameters.Add(pUID)
票数 1
EN

Stack Overflow用户

发布于 2010-08-15 02:09:11

经过一段时间的调试和sql跟踪,我发现DB所属的愚蠢应用程序对组成员的待遇不同,组驻留在管理数据库中,但组的用户成员驻留在另一个数据库中。

感谢上面的每一个人,他们提供了时间和想法,以协助代码。我已经将代码更改为只使用两个事务和两个连接(1用于管理和子数据库)。现在的代码要好得多,而且更容易阅读。

再次感谢,

哑光

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3477419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档