Asp.net 在vb.net中使用webmethod从数据库获取数据返回null
我试图从asmx服务内webmethod中的存储过程中获取数据,但无论我尝试什么,它都返回nullAsp.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
<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()>