调用带返回参数的存储过程

qinguangjun123 2005-11-28 02:48:50
我在调用存储过程的时候提示:不允许从数据类型 sql_variant 到 nvarchar 的隐性转换。请使用 CONVERT 函数来运行此查询(程序代码和存储过程如下:)
程序代码:
Dim n_objCommand As New OleDb.OleDbCommand
n_objCommand.Connection = Me.m_objConn
n_objCommand.CommandType = CommandType.StoredProcedure
n_objCommand.CommandText = "UserLogin"
n_objCommand.Parameters.Add("@UserID", SqlDbType.NVarChar, 20)
n_objCommand.Parameters.Add("@UserPass", SqlDbType.NVarChar, 20)
n_objCommand.Parameters.Add("@LoginFlag", SqlDbType.Int, 50)
n_objCommand.Parameters.Add("@UserName", SqlDbType.NVarChar, 30)
n_objCommand.Parameters(0).Value = strUserID
n_objCommand.Parameters(1).Value = strUserPass
n_objCommand.ExecuteNonQuery()‘*********这里出先问题*****
If n_objCommand.Parameters("@LoginFlag").Value = 1 Then
'存在
End If
存储过程:
CREATE PROCEDURE UserLogin
@UserID nvarchar(20),
@UserPass nvarchar(20),
@LoginFlag int output,
@UserName nvarchar(30) output
AS
declare @strSql nvarchar(200)
select @loginflag=count(*) from userinfodb where userid=convert(nvarchar(20),@userid) and userpass=convert(nvarchar(20), @userpass )
if @loginflag=1
begin
select @UserName= username from userinfodb where userid=convert(nvarchar(20),@userid) and userpass=convert(nvarchar(20), @userpass )
end
else
begin
set @loginflag=0
set @UserName=""
end
return @loginflag
return @username
请大家帮帮忙,不胜感激。
...全文
336 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingdaof4 2006-01-19
  • 打赏
  • 举报
回复
还是不好,好象打了sp4之后就会出现这种错误
qinguangjun123 2005-11-29
  • 打赏
  • 举报
回复
还有其他的办法吗?
qinguangjun123 2005-11-28
  • 打赏
  • 举报
回复
同志门帮忙啊。
qinguangjun123 2005-11-28
  • 打赏
  • 举报
回复
to vivianfdlpw:
麻烦你在想想其他的办法。
ziqing 2005-11-28
  • 打赏
  • 举报
回复
我靠,你的贴子还很热呀1
qinguangjun123 2005-11-28
  • 打赏
  • 举报
回复
to vivianfdlpw:
我也更改了。全部用的你的。
vivianfdlpw 2005-11-28
  • 打赏
  • 举报
回复
注意这行更改了

select @UserName= convert(nvarchar(30),username) from userinfodb

你的表中使用了sql_variant 类型?如果有需要显式转换为nvarchar
qinguangjun123 2005-11-28
  • 打赏
  • 举报
回复
还是老样子。
vivianfdlpw 2005-11-28
  • 打赏
  • 举报
回复
.NET程序:

n_objCommand.Parameters.Add("@UserID", SqlDbType.NVarChar, 20)
n_objCommand.Parameters.Add("@UserPass", SqlDbType.NVarChar, 20)
n_objCommand.Parameters.Add("@LoginFlag", SqlDbType.Int, 50)
n_objCommand.Parameters.Add("@UserName", SqlDbType.NVarChar, 30)
n_objCommand.Parameters(0).Value = strUserID
n_objCommand.Parameters(1).Value = strUserPass
n_objCommand.Parameters(2).Value =System.DBNull.Value
n_objCommand.Parameters(3).Value =System.DBNull.Value
n_objCommand.ExecuteNonQuery()


存储过程:

CREATE PROCEDURE UserLogin
@UserID nvarchar(20),
@UserPass nvarchar(20),
@LoginFlag int output,
@UserName nvarchar(30) output
AS
declare @strSql nvarchar(200)
select @loginflag=count(*) from userinfodb where userid=convert(nvarchar(20),@userid) and userpass=convert(nvarchar(20), @userpass )
if @loginflag=1
begin
select @UserName= convert(nvarchar(30),username) from userinfodb where userid=convert(nvarchar(20),@userid) and userpass=convert(nvarchar(20), @userpass )
end
else
begin
set @loginflag=0
set @UserName=""
end

go

qinguangjun123 2005-11-28
  • 打赏
  • 举报
回复
大家来帮帮忙。
qinguangjun123 2005-11-28
  • 打赏
  • 举报
回复
to vivianfdlpw:
加try和不加try不是一样的道理吗?加上go以后还是有错误。
qinguangjun123 2005-11-28
  • 打赏
  • 举报
回复
大家快来帮下忙!
vivianfdlpw 2005-11-28
  • 打赏
  • 举报
回复
另外你的存储过程有点问题

CREATE PROCEDURE UserLogin
@UserID nvarchar(20),
@UserPass nvarchar(20),
@LoginFlag int output,
@UserName nvarchar(30) output
AS
declare @strSql nvarchar(200)
select @loginflag=count(*) from userinfodb where userid=convert(nvarchar(20),@userid) and userpass=convert(nvarchar(20), @userpass )
if @loginflag=1
begin
select @UserName= username from userinfodb where userid=convert(nvarchar(20),@userid) and userpass=convert(nvarchar(20), @userpass )
end
else
begin
set @loginflag=0
set @UserName=""
end

go
vivianfdlpw 2005-11-28
  • 打赏
  • 举报
回复
try

n_objCommand.Parameters.Add("@UserID", SqlDbType.NVarChar, 20)
n_objCommand.Parameters.Add("@UserPass", SqlDbType.NVarChar, 20)
n_objCommand.Parameters.Add("@LoginFlag", SqlDbType.Int, 50)
n_objCommand.Parameters.Add("@UserName", SqlDbType.NVarChar, 30)
n_objCommand.Parameters(0).Value = strUserID
n_objCommand.Parameters(1).Value = strUserPass
n_objCommand.Parameters(2).Value =System.DBNull.Value
n_objCommand.Parameters(3).Value =System.DBNull.Value
n_objCommand.ExecuteNonQuery()

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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