存储过程测试返回值通常,VB中调用,返回值一直为初始值
存储过程测试返回值正常,VB中调用,返回值一直为初始值
存储过程测试返回值正常,VB.net2010中调用,@qx和@yn返回值一直为初始值
declare @i int
declare @j int
exec check_login '张三','123456',@i output,@j output
select @i
/* select @j */
密码给对的和错的,在SQL里查询返回的都正确。一晚上没查出问题出在哪。。。。。。
代码如下
USE [crm]
GO
/****** Object: StoredProcedure [dbo].[check_login] Script Date: 07/13/2012 04:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[check_login]
@usr varchar(50) ,
@pass varchar(50),
@qx int output,
@yn int output
AS
declare @i varchar
set @qx=0
set nocount on
select @qx=[user_qx] from user_info where [user_name]=@usr and [user_pwd]=@pass
if @qx=0
set @yn=0
else
set @yn=1
VB.NET代码如下:
Private Sub Button_login_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_login.Click
Dim dbConnection = New SqlClient.SqlConnection("Data Source=192.168.0.134;Initial Catalog=crm;Persist Security Info=True;User ID=sa;Password=123")
Dim cmdSQL = New SqlClient.SqlCommand("check_login", dbConnection)
cmdSQL.CommandType = CommandType.StoredProcedure
cmdSQL.Parameters.Add("@usr", SqlDbType.VarChar, 50)
cmdSQL.Parameters("@usr").Value = Me.ComboBox_username.SelectedItem.ToString
cmdSQL.Parameters.Add("@pass", SqlDbType.VarChar, 50)
cmdSQL.Parameters("@pass").Value = Me.TextBox_pwd.Text
cmdSQL.Parameters.Add("@qx", SqlDbType.Int, 4)
cmdSQL.Parameters("@qx").Direction = ParameterDirection.Output
cmdSQL.Parameters.Add("@yn", SqlDbType.Int, 4)
cmdSQL.Parameters("@yn").Direction = ParameterDirection.Output
dbConnection.Open()
cmdSQL.ExecuteNonQuery()
dbConnection.Close()
If cmdSQL.Parameters("@yn").Value = 1 Then
'Form1.Show()
'Me.Close()
MsgBox(cmdSQL.Parameters("@qx").Value)
Else
MsgBox(cmdSQL.Parameters("@qx").Value)
End If
End Sub
------解决方案--------------------
mdSQL.Parameters("@usr").Value = Me.ComboBox_username.SelectedItem.ToString
cmdSQL.Parameters("@pass").Value = Me.TextBox_pwd.Text
都换成实际数据库中存在的值再测,应是可以的
估计Me.ComboBox_username.SelectedItem.ToString有问题,你取的值可能不是选中的文本
,而是Me.ComboBox_username.SelectedValue
存储过程测试返回值正常,VB.net2010中调用,@qx和@yn返回值一直为初始值
declare @i int
declare @j int
exec check_login '张三','123456',@i output,@j output
select @i
/* select @j */
密码给对的和错的,在SQL里查询返回的都正确。一晚上没查出问题出在哪。。。。。。
代码如下
USE [crm]
GO
/****** Object: StoredProcedure [dbo].[check_login] Script Date: 07/13/2012 04:37:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[check_login]
@usr varchar(50) ,
@pass varchar(50),
@qx int output,
@yn int output
AS
declare @i varchar
set @qx=0
set nocount on
select @qx=[user_qx] from user_info where [user_name]=@usr and [user_pwd]=@pass
if @qx=0
set @yn=0
else
set @yn=1
VB.NET代码如下:
Private Sub Button_login_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_login.Click
Dim dbConnection = New SqlClient.SqlConnection("Data Source=192.168.0.134;Initial Catalog=crm;Persist Security Info=True;User ID=sa;Password=123")
Dim cmdSQL = New SqlClient.SqlCommand("check_login", dbConnection)
cmdSQL.CommandType = CommandType.StoredProcedure
cmdSQL.Parameters.Add("@usr", SqlDbType.VarChar, 50)
cmdSQL.Parameters("@usr").Value = Me.ComboBox_username.SelectedItem.ToString
cmdSQL.Parameters.Add("@pass", SqlDbType.VarChar, 50)
cmdSQL.Parameters("@pass").Value = Me.TextBox_pwd.Text
cmdSQL.Parameters.Add("@qx", SqlDbType.Int, 4)
cmdSQL.Parameters("@qx").Direction = ParameterDirection.Output
cmdSQL.Parameters.Add("@yn", SqlDbType.Int, 4)
cmdSQL.Parameters("@yn").Direction = ParameterDirection.Output
dbConnection.Open()
cmdSQL.ExecuteNonQuery()
dbConnection.Close()
If cmdSQL.Parameters("@yn").Value = 1 Then
'Form1.Show()
'Me.Close()
MsgBox(cmdSQL.Parameters("@qx").Value)
Else
MsgBox(cmdSQL.Parameters("@qx").Value)
End If
End Sub
------解决方案--------------------
mdSQL.Parameters("@usr").Value = Me.ComboBox_username.SelectedItem.ToString
cmdSQL.Parameters("@pass").Value = Me.TextBox_pwd.Text
都换成实际数据库中存在的值再测,应是可以的
估计Me.ComboBox_username.SelectedItem.ToString有问题,你取的值可能不是选中的文本
,而是Me.ComboBox_username.SelectedValue