在VB.NET中调用存储过程,获取返回值时遇到问题,高分紧急求助!!

sg163 2007-11-28 09:37:44
存储过程:
create or replace procedure login
(v_personcode in t_otms_user.personcode%type,v_password in t_otms_user.password%type,returnvalue out boolean)
as
num number(1);
begin
select count(*) into num from t_otms_user
where t_otms_user.personcode = v_personcode and t_otms_user.password = v_password;
if num = 0 then
returnvalue := false;
dbms_output.put_line(num);
else
returnvalue := true;
dbms_output.put_line(num);
end if;
end login;


VB.NET调用语句:
Dim con As OleDbConnection = New OleDbConnection("Provider=MSDAORA.1;Password=otms;User ID=otms;Data Source=orcl")
con.Open()

Dim cmd As OleDbCommand = New OleDbCommand("login", con)
cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.Add("v_personcode", SqlDbType.Int).Value = TextBox1.Text
cmd.Parameters.Add("v_password", SqlDbType.Int).Value = TextBox2.Text

cmd.Parameters.Add("returnvalue", SqlDbType.Int)
cmd.Parameters("returnvalue").Direction = ParameterDirection.Output

Dim valueend As Boolean
valueend = cmd.Parameters("returnvalue").Value

If valueend = True Then
Dim MainFrm As New MainFrm
MainFrm.Show()
Me.Hide()
Else
MsgBox("用户名或密码错误,请重试。", MsgBoxStyle.Exclamation, "错误信息")
End If

con.Close()

现在问题是我不管怎么输用户名和密码,返回的值都是TRUE,请问各位高手哪里出问题了?
...全文
202 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
TomatoZhang 2008-01-28
  • 打赏
  • 举报
回复
向各位大虾学习,并帮lz顶了
Terran5 2008-01-28
  • 打赏
  • 举报
回复
LZ首先是没有执行存储过程,如果出现了异常,那么你就要检查
cmd.Parameters.Add("v_personcode", SqlDbType.Int).Value = TextBox1.Text
cmd.Parameters.Add("v_password", SqlDbType.Int).Value = TextBox2.Text
你的数据类型是否和数据库匹配。
shepherd_cw 2008-01-27
  • 打赏
  • 举报
回复


少了一句在“valueend = cmd.Parameters("returnvalue").Value ”
上加cmd.ExecuteNonQuery() 试试
wb80222 2008-01-25
  • 打赏
  • 举报
回复
使用完参数要删除。 cmd.Parameters.clear() ,要么会产生很多参数,导致异常。
pfcszp 2008-01-25
  • 打赏
  • 举报
回复
我们也在用ORA的数据库但是我还闹不清学习下
wdzr_826 2008-01-24
  • 打赏
  • 举报
回复
在SQL分析器里走存储过程,如果能走通的话。
程序里时不时参数没给全,或是类型问题。
足球中国 2008-01-24
  • 打赏
  • 举报
回复
类型库引用的问题.删掉一些东西.比如一些类或控件之类的再重新试.
应该能解决问题.
wb80222 2008-01-24
  • 打赏
  • 举报
回复
别忘了使用完参数一定要清除
wb80222 2008-01-16
  • 打赏
  • 举报
回复
看看这段代码,或许对你有帮助:
Dim pam As New OleDb.OleDbParameter
.................
OleDbConnection1.Open()
OleDbCommand1.Connection = OleDbConnection1
OleDbCommand1.CommandType = CommandType.StoredProcedure
OleDbCommand1.CommandText = "product_id"
pam.Direction = ParameterDirection.Output
pam.DbType = DbType.String
pam.Size = 10
OleDbCommand1.Parameters.Add(pam)
OleDbCommand1.ExecuteNonQuery()
TextBox1.Text = pam.Value
.................

检查一下数据类型。
sg163 2007-11-28
  • 打赏
  • 举报
回复
确实是少了一句

现在我加了cmd.ExecuteNonQuery() ,执行到这步的时候出现了错误了.

"未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。"
boblaw 2007-11-28
  • 打赏
  • 举报
回复
暈LZ,使用command不用執行有啥用?cmd.ExecuteNonQuery
honey52570 2007-11-28
  • 打赏
  • 举报
回复
确实是少了一句
shadowno 2007-11-28
  • 打赏
  • 举报
回复
没太看懂,觉得是不是类型转换有问题,returnvalue 存储过程出来可能为null,

cmd.Parameters.Add("v_personcode", SqlDbType.Int).Value = TextBox1.Text ....数据库、存储过程定义的是int?
cmd.Parameters.Add("v_password", SqlDbType.Int).Value = TextBox2.Text ....数据库、存储过程定义的是int?
cjhxajh 2007-11-28
  • 打赏
  • 举报
回复
Dim con As OleDbConnection = New OleDbConnection("Provider=MSDAORA.1;Password=otms;User ID=otms;Data Source=orcl")
con.Open()

Dim cmd As OleDbCommand = New OleDbCommand("login", con)
cmd.CommandType = CommandType.StoredProcedure

cmd.Parameters.Add("v_personcode", SqlDbType.Int).Value = TextBox1.Text
cmd.Parameters.Add("v_password", SqlDbType.Int).Value = TextBox2.Text

cmd.Parameters.Add("returnvalue", SqlDbType.Int)
cmd.Parameters("returnvalue").Direction = ParameterDirection.Output

cmd.ExecuteNonQuery() '没执行存储过程
Dim valueend As Boolean
valueend = cmd.Parameters("returnvalue").Value

If valueend = True Then
Dim MainFrm As New MainFrm
MainFrm.Show()
Me.Hide()
Else
MsgBox("用户名或密码错误,请重试。", MsgBoxStyle.Exclamation, "错误信息")
End If

con.Close()

16,554

社区成员

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

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