存储过程:admin_yz
CREATE PROCEDURE [admin_yz] 
  @name varchar,@mm varchar
AS
IF(Select mm from admin where name= @name )=@mm
   RETURN 1
ELSE 
  RETURN  0
GO
VB客户端: 
 Myconnection.ConnectionString = "Driver={SQL server};server=FS;uid=sa;pwd=;database=yd"
Myconnection.Open
Set rs1 = New ADODB.Recordset
  Set cmd = New ADODB.Command
 cmd.ActiveConnection = Myconnection  cmd.CommandText = "admin_yz"
  cmd.CommandType = adCmdStoredProc
 Set param = cmd.CreateParameter("RetVal", adInteger, adParamReturnValue, 4)
 cmd.Parameters.Append param
  Set param = cmd.CreateParameter("name", adChar, adParamInput, 20, Trim(Text3.Text))
 cmd.Parameters.Append param
  Set param = cmd.CreateParameter("mm", adChar, adParamInput, 20, Trim(Text2.Text))
  cmd.Parameters.Append param  Set rs1 = cmd.Execute()
  Set rs1 = Nothing
If cmd.Parameters("RetVal").Value = 1 Then
frm_main.Show
Unload Me
Else
MsgBox ("密码错误,请重新输入!!!")
Text2.SetFocus
End If
返回的结果总不是‘1’,既提示 ("密码错误,请重新输入!!!")
但在查询分析器里却可以返回正确的值,真不知道哪里搞错了。

解决方案 »

  1.   

    lsph = mycommand.Parameters("@rkdjh").Value '将返回值赋给变量lsph你之前的这个.在前面加上SET 就行了!
      

  2.   

    exec admin_yz 'BOSS', '001',这是在SQL探测器里的执行语句,没有空格啊
    谢谢你,那个问题我已经解决了
      

  3.   

     Set param = cmd.CreateParameter("mm", adChar, adParamInput, 20, Trim(Text2.Text))
    我发现了,如果把 adChar换成adInteger,然后把存储过程里的@mm也改成int型的,表里的mm字段也改成int的,就可以了,但我用户名和密码必须用字符型的啊!
      

  4.   

    @name varchar,@mm varchar没定义长度.建议定义一个长度,例如:@name varchar(20),@mm varchar(20)
      

  5.   

    麻烦你再帮我看看这个问题:我在SQL2000里面设计的表里有个“数量”的字段是“decimal”数据,精度18,小数位是2,但在VB调用存储过程向该表里插入数据时都没有小数位,如“1.234”在表里只显示“1”,如果是“0.698”这样的就是“0”,总之小数点后不管是多少都失去了。这事咋回事。Y = "insert_dictionary" & " " & Trim(Val(Text4.Text)) & ""  还有怎样向存储过程传递像药品规格这样的数据,如(“2ml*12支”),如果用val(2ml*12支),数据库里只能接收到“2”,而不用val就提示“ml”出错,数据库里这个字段什么字符型如:varchar,nvarchar我都试过了,都不行。
    帖子地址:http://topic.csdn.net/u/20111003/16/4e724da9-d09b-47d0-ad9a-2d975a0fce33.html,加分