.Net 一个奇怪的问题

lijinsheng2010 2011-02-22 08:46:46
在执行 sql 的update 操作时,使用 ExecuteNonQuery()这个方法出了个怪问题。 在DB中执行sql 是没有问题的,但是应用程式 却返回了 0。 我做 insert 动作 都可以。请高手帮忙:下面是我的代码
Public Function UpdateCustomer(ByVal Cust As Customer) As Integer
Dim _result As Integer = 0
Dim sql As String = "update t_customer set name=:name,address=:address,email=:email where customercode=:customercode"
Dim conn As OracleConnection = Nothing
Dim cmd As OracleCommand = Nothing

Try
conn = New OracleConnection(connString)
If conn.State <> ConnectionState.Open Then
conn.Open()
End If
cmd = New OracleCommand(sql, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("customercode", Cust.CustomerCode)
cmd.Parameters.Add("name", Cust.Name)
cmd.Parameters.Add("address", Cust.Address)
cmd.Parameters.Add("email", Cust.Email)

_result = cmd.ExecuteNonQuery()在这里返回了0,在DB是OK的,影响1行
cmd.Parameters.Clear()

Return _result
Catch ex As Exception
Throw ex
Finally
conn.Close()
End Try
End Function
...全文
106 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijinsheng2010 2011-02-23
  • 打赏
  • 举报
回复
问题解决了,谢谢各位的关心和帮助。解决方案是:Oracle的参数查询,跟sql语句中参数的顺序有关,也就是说,把 customercode参数放到最后,就成功了。再次感谢!
lijinsheng2010 2011-02-23
  • 打赏
  • 举报
回复
今天 hard code 一下 可以成功,但是为何 用参数代替 就返回0,好怪的,我设置参数数据类型了,还是不行。
机器人 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lijinsheng2010 的回复:]
引用 9 楼 bclz_vs 的回复:
带进去的值是多少,肯定是没有符合条件的记录,所以更新没有成功

我在Debug查看了带进来的值,都是页面来的,而且customercode 的值 我在DB里面查了,是存在的。不过还有一点就是 我的 name,address是 nvarchar2类型的,不知道这样有影响没有,要不要在设置参数的时候指定数据类型。 但是同样的代码,我用 Insert 指令是……
[/Quote]
这的确很奇怪,看不出有问题了。
另外,确认下你实际编码环境的DB和你SQLPlus连的DB是同一个吗?
(检查下连接字符串的TNS)
Tiger_Zhao 2011-02-22
  • 打赏
  • 举报
回复
参数类型加上去比较保险。
毕竟现在 OracleCommand、SqlCommand 是不同的,不像原先 ADODB.Command 内部处理规则是固定的。
lijinsheng2010 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bclz_vs 的回复:]
带进去的值是多少,肯定是没有符合条件的记录,所以更新没有成功
[/Quote]
我在Debug查看了带进来的值,都是页面来的,而且customercode 的值 我在DB里面查了,是存在的。不过还有一点就是 我的 name,address是 nvarchar2类型的,不知道这样有影响没有,要不要在设置参数的时候指定数据类型。 但是同样的代码,我用 Insert 指令是OK的,执行cmd.executeNonQuery()返回1,在DB也是有数据的,所以这就是奇怪的地方了。
anicesunday 2011-02-22
  • 打赏
  • 举报
回复
听老牛的试试!
lijinsheng2010 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tiger_zhao 的回复:]
[code=VB.N]ET cmd.Parameters.Add(":customercode", Cust.CustomerCode) ' <-参数名中的冒号不能少,下同'[/code]
[/Quote]
我这样都OK,你去加上':'试试了,绝对报 invalid character.
Public Function createCustomer(ByVal cust As Customer) As Integer
Dim _result As Integer = -1
If IsExistCustomer(cust.CustomerCode) Then
Return _result
Else
Dim sql As String = "insert into t_customer(customercode,name,address,email) values (:customercode,:name,:address,:email)"
Dim conn As OracleConnection = Nothing
Dim cmd As OracleCommand = Nothing

Try
conn = New OracleConnection(connString)
If conn.State <> ConnectionState.Open Then
conn.Open()
End If
cmd = New OracleCommand(sql, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("customercode", cust.CustomerCode)
cmd.Parameters.Add("name", cust.Name)
cmd.Parameters.Add("address", cust.Address)
cmd.Parameters.Add("email", cust.Email)

_result = cmd.ExecuteNonQuery()

Return _result
Catch ex As Exception
Throw ex
Finally
conn.Close()
End Try
End If
Tiger_Zhao 2011-02-22
  • 打赏
  • 举报
回复
[code=VB.NE]T cmd.Parameters.Add(":customercode", Cust.CustomerCode) '<-参数名中的冒号不能少,下同'[/code]
边城的刀声 2011-02-22
  • 打赏
  • 举报
回复
带进去的值是多少,肯定是没有符合条件的记录,所以更新没有成功
lijinsheng2010 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fangxinggood 的回复:]
代码看完,没有明显的问题。
只能是debug下看看where条件的customercode是否真存在。
同时检查下customercode是什么类型的?(是否是DB是int,你传了string;或者反过来)
[/Quote]
customercode type is varchar2(6), value is '201102' 在DB 执行结果如下:
*** SCRIPT START : Session:OMS@woms5(1) 22-二月-2011 8:26:31 ***
Processing ...
UPDATE t_customer
SET NAME = '湖南移動公司',
address = '湖南衡陽雁峰區',
email = '11@126.com'
WHERE customercode = '201102'

1 row(s) updated

*** SCRIPT END : Session:OMS@woms5(1) 22-二月-2011 8:26:31 ***
机器人 2011-02-22
  • 打赏
  • 举报
回复
代码看完,没有明显的问题。
只能是debug下看看where条件的customercode是否真存在。
同时检查下customercode是什么类型的?(是否是DB是int,你传了string;或者反过来)
lijinsheng2010 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 robake 的回复:]
你的数据库是什么数据库?

你的SQL语句似乎有问题。。。
[/Quote]

我的数据库是Oracle的 其中 t_customer 表的主键是 customercode, 单步调试了,看了里面的值都是OK的,但是执行到 ExecuteNonQuery()这个函数 返回0,其他也没有异常出现!
lijinsheng2010 2011-02-22
  • 打赏
  • 举报
回复
数据确实没有修改成功!就是不知道哪里出了问题了
wuyq11 2011-02-22
  • 打赏
  • 举报
回复
数据库中数据是否修改,单步看看数据
使用OracleType
robake 2011-02-22
  • 打赏
  • 举报
回复
你的数据库是什么数据库?

你的SQL语句似乎有问题。。。
wtnu200 2011-02-22
  • 打赏
  • 举报
回复
断点查看下执行的sql语句。拿到分析器下执行下就知道。
兔子-顾问 2011-02-22
  • 打赏
  • 举报
回复
估计是你看错了。这里是0,数据库中应该也是没操作成功。

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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