繁体   English   中英

在 web 方法中从数据库获取数据返回 vb.net 中的 null

[英]Getting data from database in a webmethod return null in vb.net

我正在尝试从 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 并且版本具有值,但在代码中 dtRefertoDocIndex 为 null,因此版本也为 null。 任何帮助将不胜感激。

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

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

您的 web 方法将自动为您拆分出参数。

所以,你的 web 方法也需要是一个 function 返回一个值,比如一个字符串

因此它应该是:

<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 <---- 你的 function 必须返回一些东西,对吧?

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

回答:

因为我不想冒险返回类型是列单元格,或者任何其他数据类型 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。 还要非常小心地注意 JavaScript (jQuery) 中的参数名称必须如何与您创建的公共 function 中的参数相匹配。

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

<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);
                }
            });
        }

再次注意我们如何使用在公共 function 中定义的实际 vb.net 名字和姓氏。

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

如果您查看 web 服务模板,请注意您想要取消注释第一行,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM