web service 的方法返回的integer类型的,在客户端asp.net调用的时候出错
在web service的方法是:
<WebMethod()> Public Function GetSavedPassword(ByVal strAcctID As String,byref arPword as Byte()) as integer
arPword As Byte()
' 创建连接数据库的 Connection 对象。
Dim arPword As Byte()
Dim cn As New SqlConnection(DBConnection.ConnectionString)
Dim cmd As New SqlCommand("spGetAccountPassword", cn)
' 设置该 Command 执行的是一个存储过程
cmd.CommandType = CommandType.StoredProcedure
'为存储过程添加参数。
Dim paramAcct As New SqlParameter("@AccountID", SqlDbType.Int, 100)
paramAcct.Value = strAcctID
cmd.Parameters.Add(paramAcct)
'为存储过程添加参数,注意该参数为输出类型。
Dim paramPassword As New SqlParameter("@Pword", SqlDbType.Binary, 20)
paramPassword.Direction = ParameterDirection.Output
cmd.Parameters.Add(paramPassword)
' 为存储过程添加返回参数,该参数的值如果为 0 则表示数据库操作失败,非 0 则为成功。
Dim paramReturn As New SqlParameter("@ReturnValue", SqlDbType.Int)
paramReturn.Direction = ParameterDirection.ReturnValue
cmd.Parameters.Add(paramReturn)
Dim iRetValue As Integer = DBResult.Success
Try
' 打开数据库连接,执行对数据库的操作。注意操作数据库会引发异常。
cn.Open()
' Command 对象的 ExecuteNonQuery 方法用来执行不返回记录集的 SQL 语句或存储过程。
cmd.ExecuteNonQuery()
If paramReturn.Value = 1 Then
'如果返回参数的值为 1,则标识数据库操作成功。
arPword = paramPassword.Value
Else
'否则标识数据库操作失败。
iRetValue = DBResult.Failed
End If
Catch e As Exception
' 产生异常,则对 iRetValue 赋值标志数据库操作失败。
iRetValue = DBResult.Failed
Finally
' 关闭数据库连接,以节省系统资源。
If cn.State = ConnectionState.Open Then
cn.Close()
End If
End Try
Return iRetValue
在客户端是asp.net,代码是:
Private Sub btnSummit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSummit.Click
'设立一个用户输入的密码是否正确的标志变量。
Dim bValidPassword As Boolean = False
'保存哈希后的数据库密码
Dim arHashedSavedPass As Byte()
'Dim userID As Integer
'保存反映数据库操作正确与否的返回值
Dim iRetValue As Integer
'从数据库中获取用户正确的密码。
Dim log As New Bank
iRetValue = log.GetSavedPassword(txtAccountID.Text, arHashedSavedPass)
If iRetValue = DBResult.Success Then
'如果数据库操作无误,则验证数据库密码和用户输入的密码。
'对用户输入的密码进行 Unicode 编码。
'在下面的代码中对用户输入的密码进行了哈希处理,采用的是 SHA-1 算法。
'课本第二十四章有对散列数据和 SHA1Managed 类的详细介绍。
Dim UE As New UnicodeEncoding
Dim arSuppliedPass As Byte() = UE.GetBytes(txtPassword.Text)
'对上一步得到的 Unicode 编码值进行哈希处理。
Dim SHhash As New SHA1Managed
Dim arHashSuppliedPass As Byte() = SHhash.ComputeHash(arSuppliedPass)
'比较数据库密码和用户输入的密码两者的哈希值是否相等。
Dim bHashesEqual As Boolean = True
Dim x As Integer 'x 为循环变量
For x = 0 To arHashSuppliedPass.Length - 1
If arHashSuppliedPass(x) <> arHashedSavedPass(x) Then
bHashesEqual = False
Exit For
End If
Next
If bHashesEqual Then
'如果相等,则标志变量为真。
bValidPassword = True
Else
'否则显示密码错误信息。
lblInfo.Text = "密码错误,请重试!"
End If
End If
If bValidPassword Then
'如果用户登录名和密码都正确,则在会话间保存用户登录信息。
'保存用户登陆帐号。
Session("AccountID") = txtAccountID.Text
Dim strAccountID As String = txtAccountID.Text
'新建一个客户端的Cookie 值。
Dim objNewCookie As New HttpCookie("Bank")
'设定 Cookie 的有效日期
objNewCookie.Expires = DateTime.Now.AddDays(30)
'添加 Cookie 子项。
objNewCookie.Values.Add("AccountID", strAccountID)
'将 Cookie 值写入客户端
Response.Cookies.Add(objNewCookie)
Dim sID As String = txtAccountID.Text.Trim()
If (FormsAuthentication.GetRedirectUrl(sID, False). _
IndexOf("default.aspx") = -1) Then
'如果用户试图访问其他网页,则跳转到该网页。
FormsAuthentication.RedirectFromLoginPage(sID, False)
Else
'如果用户访问的是登录网页,则跳转到“用户需要服务”网页。
FormsAuthentication.SetAuthCookie(sID, False)
Response.Redirect("Select.aspx")
End If
End If
End Sub
在运行的时候出现了一个错误:
无法将xmlnode类型转换成integer类型.
请大家帮忙解决这个问题,谢谢
问题点数:0、回复次数:4Top
1 楼luckyprg(lucky)回复于 2005-06-06 16:39:12 得分 0
那就把数据类型转换一下嘛。Top
2 楼luckyprg(lucky)回复于 2005-06-06 16:40:27 得分 0
哦,不好意思,看错了,只看了你的标题,没看出错提示:
无法将xmlnode类型转换成integer类型.
这个很明显,xmlnode 是一个对象,肯定不能当成integer调用的,自己想一想,转换一下。Top
3 楼huangyiping1()回复于 2005-06-07 10:04:07 得分 0
我不知道该怎么转换,我转换了还是不行呢?
谢谢你的回答.Top
4 楼mouse0987(飞狐)回复于 2005-06-07 17:14:09 得分 0
请点这里,查看详细情况
http://www.lz.net.cn/bbs/X_AdvCom_Get.asp?UserID=7342Top




