[英]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.