Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在vb.net中使用webmethod从数据库获取数据返回null_Asp.net_Json_Database_Vb.net - Fatal编程技术网

Asp.net 在vb.net中使用webmethod从数据库获取数据返回null

Asp.net 在vb.net中使用webmethod从数据库获取数据返回null,asp.net,json,database,vb.net,Asp.net,Json,Database,Vb.net,我试图从asmx服务内webmethod中的存储过程中获取数据,但无论我尝试什么,它都返回null <WebMethod()> <ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XmlSerializeString:=False)> Public Function SendIdDocuments(ByVal idReferto As String) 'This id has bee

我试图从asmx服务内webmethod中的存储过程中获取数据,但无论我尝试什么,它都返回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

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

一些事情。显然你不能真正使用msgbox

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

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

因此,web方法还需要是一个返回值(比如字符串)的函数

因此,它应该是:

<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
如果您没有使用jQuery,那么当然您必须重新编写上面的内容

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

这里是另一个简单的例子。我们传递firstname和last name,并将其作为单个字符串返回:

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

    Dim strResult As String = ""

    strResult = FirstName & " " & LastName

    Return strResult

End Function
请再次注意,我们是如何使用在公共函数中定义的实际vb.net FirstName和LastName的

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

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

' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()>
”要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。

没有足够的信息进行调试。我更新了问题。什么是operations.G\u REPORT\u BY\u ID?这是代码中运行存储过程的方法吗?如果是的话,我们可以看到这一点。为什么JsonConvert.DeserializeObject(idReferto)已经是字符串了?为什么不通过ID方法将其直接传递给您的G_reporty_呢?我在ajax jquery中调用webmethod时已经完成了这一部分,并且在函数(webmethod)中返回了一个值,但我不想编写太多代码来显示问题中更重要的部分。问题是,函数卡在“Dim version As String”中,即使我删除了msgbox,它也会发生同样的情况,ajax调用返回500个错误。然后您必须显示/发布更多代码。发布方法,然后发布js。上述步骤应该有效。如果您打开了友好URL,那么在routeconfig.vb中,推荐这一行settings.AutoRedirectMode=RedirectMode.Permanent。上面简短的js ajax调用和上面简短的vb代码存根就是实现此功能所需的全部内容。尝试上面的FirstName+LastName示例,看看是否有效。您也没有提到是否使用jQuery,因为我上面的示例假设了这一点。在没有jQuery的情况下,您可以很容易地进行ajax调用,但是您没有注意到正在使用的是哪个。
<WebMethod()>
Public Function MakeName(FirstName As String, LastName As String) As String

    Dim strResult As String = ""

    strResult = FirstName & " " & LastName

    Return strResult

End Function
        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);
                }
            });
        }
' To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
<System.Web.Script.Services.ScriptService()>