VB.NET 从 ODBC 获取数据为 JSON
Posted
技术标签:
【中文标题】VB.NET 从 ODBC 获取数据为 JSON【英文标题】:VB.NET get data from ODBC as JSON 【发布时间】:2018-03-17 00:09:57 【问题描述】:我对 .NET 不是很熟悉,所以我什至不确定我是否知道如何正确地提出这个问题,因为我不得不相信这是一个常见的用例,但我的 google-fu 很可悲.
在 php 中,如果我想从数据库中获取数据并将其格式化为 JSON,我会使用类似这样的 PDO:
$query = $this->dbConn->prepare("SELECT * FROM Customers");
$query->execute();
$resultsSet = $query->fetchALL(PDO::FETCH_ASSOC);
foreach ( $resultsSet as $row )
$json = json_encode( $row );
//POST $json to web service or something
这将以 "Column Name": "Column Value", "Column Name": "Column Value", ... 的格式创建 JSON,这正是我想要的。
我将如何在 VB.NET 中执行此操作?我可以像这样使用 OdbcDataReader 从我的数据源中检索数据:
Dim Conn As New OdbcConnection("[connection string]")
Dim Cmd As New OdbcCommand("SELECT * FROM Customers", Conn)
Dim Reader As OdbcDataReader
Dim serializer As New javascriptSerializer()
Conn.Open()
Reader = Cmd.ExecuteReader()
While (Reader.Read())
json = serializer.Serialize(Reader).ToString
'this doesn't work - returns ["FieldCount":126,"FieldCount":126,"FieldCount":126...]
'POST json to web service
End While
基本上我需要做的是使用该应用程序的 ODBC 驱动程序定期从旧应用程序中直接读取大约 100 个相当大的文件(超过百万条记录),将其转换为 JSON 并将其发布到远程 Web 服务。
JSON 包含“列名”:“列值”形式的名称/值对,这一点很重要。我愿意接受其他建议。
我正在使用 VS 2017,.NET 4.6
【问题讨论】:
定义this doesn't work
我得到 ["FieldCount":126,"FieldCount":126,"FieldCount":126...]
所以您打算一次发送 1,000,000 多行数据……故意的? DataReader 不会将数据保存在序列化程序可以做任何事情的任何有意义的结构中(并且 ToString 无论如何都会回避它)。出于同样的原因,从阅读器获取数据也很乏味。
是的。我需要将数据从专有黑盒发送到 REST 端点,该端点被写入接受 1 条数据记录。我让他们修改端点以接受单个 JSON 块中的记录数组,他们可以轻松地将其转换为数组并循环它。
【参考方案1】:
将 Newtonsoft.Json nuget 包添加到项目中 使用 DataAdapter 和 DataTable 代替阅读器
DataAdapter.Fill(DataTable)
然后将DataTable传递给这个小函数
Public Function DataTableToJSONWithJSONNet(table As DataTable) As String
Dim JSONString As String = String.Empty
JSONString = JsonConvert.SerializeObject(table)
Return JSONString
End Function
【讨论】:
这会将所有记录放在一个 JSON 字符串中。它可能很好用,但帖子表明有 126 列,所以 126*1,000,000 可能会超过某个地方。或者,接收器/API 一次只需要一个。无论哪种情况,您都必须做一些不同的事情。 OP 不会解释允许提供替代品 我最终使用了这个。 REST 端点被编写为一次接受一条记录,这就是我想使用数据读取器的原因,但我让他们修改它以接受单个 JSON 块中的多条记录。我最终为保留内存所做的事情是使用驱动程序的 OFFSET 和 LIMIT 以块的形式从 ODBC 驱动程序获取数据,并一次抓取 1000 行并通过网络传送它们。感谢您的帮助 - 我很难理解 .NET。以上是关于VB.NET 从 ODBC 获取数据为 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 Json.NET 从 VB.NET 中的 JSON 获取信息
从android解析jsonObject并在webservice vb.net中获取它