在vb.net中,从Web方法中的数据库获取数据返回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,因此version也为null。任何帮助都会得到通知。

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

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

你的网络方法会自动为你分配参数。

因此,您的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

注意这部分:公共函数bla-bla bla(作为字符串<----你的函数必须返回一些东西,对吧?

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

答案:

因为我不想冒险返回类型是列单元格,或者ANY OTHER数据类型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()>

最新更新