asp.net - 在 web 方法中从数据库中获取数据在 vb.net 中返回 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 ,因此版本也为 null 。任何帮助都将不胜感激。
解决方案
一些东西。显然你不能真正使用 msgbox。
接下来,.net 应该返回 JSON 而无需您指定它,但我们可以保留它。
您的网络方法将自动为您拆分参数。
所以,你的网络方法也需要是一个返回值的函数,比如一个字符串
因此它应该是:
<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 <----你的函数必须返回一些东西,对吧?
现在为什么我要创建一个字符串来保存返回值然后返回它?
回答:
因为我不想冒险返回类型是列单元格,或者任何其他数据类型 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()>
推荐阅读
- dynamic - ADF DataFlow Activity 如何创建动态派生列
- python-3.x - tkinter e Adafruit IO 为什么循环不工作?
- python - 如何为我在 PYTHON 中创建的模块创建帮助功能?
- r - 如何将列表中的 data.frames 合并/附加到一起并删除重复项
- import - 岩浆的内在定义
- c++ - 防止线程不必要的退出并使池保持活动状态
- abcpdf - ABCpdf 11.3 - 无法加载 html
- javascript - 复选框数组回答正确 r 不是(条件)
- reactjs - 反应 useState 数组更新
- configuration - Azure Synapse Studio 错误:无法访问外部表“dbo”,因为位置不存在或被另一个进程使用