首页 > 解决方案 > 在 web 方法中从数据库中获取数据在 vb.net 中返回 null

问题描述

我正在尝试从 asmx 服务内的 web 方法中的存储过程中获取数据,但无论我尝试什么,它都会返回 null。

<WebMethod()>
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, 
XmlSerializeString:=False)>
Public Function SendIdDocuments(ByVal idReferto As String)
'This id has been sent from ajax as json and now I am converting it to string 
'in order to use it as parameter in stored procedure.

Dim idRef As String = JsonConvert.DeserializeObject(idReferto)
Dim dtRefertoDocIndex As DataTable = operations.G_REPORT_BY_ID(idRef)
Dim version As String = dtRefertoDocIndex.Rows(0)("VERSION")
MsgBox(Cstr(version))
End If

我试过这些:

1) Dim dtRefertoDocIndex As DataTable = operations.G_REPORT_BY_ID(Cstr(idRef)) 
2) Dim dtRefertoDocIndex As DataTable = operations.G_REPORT_BY_ID(idRef.ToString)

这些也不起作用。我已经检查了具有值的 idRef 并且来自数据库的数据没有返回 null 并且 version 有一个值,但是在代码中 dtRefertoDocIndex 为 null ,因此版本也为 null 。任何帮助都将不胜感激。

标签: asp.netjsondatabasevb.net

解决方案


一些东西。显然你不能真正使用 msgbox。

接下来,.net 应该返回 JSON 而无需您指定它,但我们可以保留它。

您的网络方法将自动为您拆分参数。

所以,你的网络方法也需要是一个返回值的函数,比如一个字符串

因此它应该是:

<WebMethod()>
Public Function SendIdDocuments(ByVal idReferto As String) as string

    Dim dtRefertoDocIndex As DataTable = operations.G_REPORT_BY_ID(idRef)
    Dim strResult as string = dtRefertoDocIndex.Rows(0)("VERSION")
    return strResult

End If

注意这部分:Public function bla bla bla) as string <----你的函数必须返回一些东西,对吧?

现在为什么我要创建一个字符串来保存返回值然后返回它?

回答:

因为我不想冒险返回类型是列单元格,或者任何其他数据类型 OTHER 然后是字符串。那么,要返回正确数据类型的 100%、200%、300% 吗?我创建了一个很好的单独字符串,并将值填充到该字符串中,然后返回该 SIMPLE 字符串类型。这消除了我们实际上返回一个简单字符串类型的任何疑问。当我们执行返回strResult?

它将被转换回 json 结果。

好的,现在,让我们设置 JavaScript(客户端)ajax 调用。

jQuery:

        function GetDocByID() {

            var MyDocID = 123;

            $.ajax({
                type: "POST",
                url: 'WebService1.asmx/MakeName',
                data: JSON.stringify({idReferto: MyDocID}),
                contentType: "application/json; charset=utf-8",
                datatype: "json",
                success: function (em) {
                    alert('VERSION result = ' + em.d);
                }
            });
        }

如果你不使用 jQuery,那么当然你必须在上面重新编写。

因此,.net 会自动为您转换为 json 和从 json 转换。还要非常小心地注意 JavaScript (jQuery) 中的参数名称必须与您创建的公共函数中的参数相匹配。

这是另一个简单的例子。我们传递名字和姓氏,并将两者作为单个字符串返回:

<WebMethod()>
Public Function MakeName(FirstName As String, LastName As String) As String

    Dim strResult As String = ""

    strResult = FirstName & " " & LastName

    Return strResult

End Function

js/jQuery 是:

        function GetNameTest() {

            var MyFirstName = 'Albert';
            var MyLastName = 'Kallal';

            $.ajax({
                type: "POST",
                url: 'WebService1.asmx/MakeName',
                data: JSON.stringify({ FirstName: MyFirstName, LastName: MyLastName }),
                contentType: "application/json; charset=utf-8",
                datatype: "json",
                success: function (em) {
                    alert('name result = ' + em.d);
                }
            });
        }

再次注意我们如何在公共函数中使用实际的 vb.net FirstName 和 LastName DEFINED。

再次注意:该函数有一个返回值(字符串)。

如果您查看 Web 服务模板,请注意您希望取消注释第一行,如下所示:

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()>

推荐阅读