返回顶部
首页 > 资讯 > 数据库 >vs2019 下用 vb.net窗体程序连接 mongodb4.2
  • 259
分享到

vs2019 下用 vb.net窗体程序连接 mongodb4.2

摘要

说起来,查看mongoDB官方的接口文档是场噩梦,尽管monGodb官方花了大力气整顿了它的api,但是简单的接口罗列,0代码示范,让人无从开始。幸亏有很多天才,成功破译,我才得以沿着他们走的路,照猫画虎的走下去。整个项目结构如下: 类


	vs2019 下用 vb.net窗体程序连接 mongodb4.2
[数据库教程]

说起来,查看mongoDB官方的接口文档是场噩梦,尽管monGodb官方花了大力气整顿了它的api,但是简单的接口罗列,0代码示范,让人无从开始。幸亏有很多天才,成功破译,我才得以沿着他们走的路,照猫画虎的走下去。整个项目结构如下:

技术图片

  • 类文件中vbtest.vb数据库实体类对应着mongodb文档vbtest,用于数据操作测试
Imports MongoDB.Bson

Public Class vbtest
    Public _id As ObjectId
    Public content As String
End Class

技术图片

  • (optional)vbmongo.vb是绑定好数据库实体类vbtest的版本
Imports MongoDB.Bson
Imports MongoDB.Driver

Public Class vbmongo
    Public client
    Public collection As IMongoCollection(Of vbtest)
    Public database As IMongoDatabase
    Public mlist As List(Of vbtest)
    Public builder As FilterDefinitionBuilder(Of vbtest) = New FilterDefinitionBuilder(Of vbtest)
    Public filter As FilterDefinition(Of vbtest)
    Public Sub New(ByVal dbname As String, ByVal collectionname As String)
        client = New MongoClient("mongodb://127.0.0.1:27017")
        database = client.GetDatabase(dbname)
        collection = database.GetCollection(Of vbtest)(collectionname)
    End Sub

    Public Async Function loadrecords() As Task(Of List(Of vbtest))
        filter = builder.Ne(Of ObjectId)("_id", New ObjectId())//_id不等于空的记录,通过这种方法蹩脚的实现了查找全部的功能Builder的大多数条件设置函数都用到了泛型Ne(Of TField)
        Dim mlist As List(Of vbtest) = Await collection.Find(filter).ToListAsync()//TField可以理解为 type of field 对应的是实体类中字段的数据类型例如 OBjectId或者String等等
        Return mlist
    End Function
    Public Async Function loadone(ByVal _id As String) As Task(Of vbtest)
        filter = builder.Eq(Of ObjectId)("_id", New ObjectId(_id))
        Dim mlist As vbtest = Await collection.Find(filter).FirstOrDefaultAsync()
        Return mlist
    End Function

    Public Async Function updateone(ByVal _id As String, ByVal doc As vbtest) As Task(Of vbtest)
        filter = builder.Eq(Of ObjectId)("_id", New ObjectId(_id))
        Dim up As UpdateDefinitionBuilder(Of vbtest) = New UpdateDefinitionBuilder(Of vbtest)()
        Dim updef As UpdateDefinition(Of vbtest)
        updef = up.Set(Of String)("content", doc.content)
        .Set(Of String)("content", doc)
        collection.UpdateOneAsync(filter, updef)
    End Function

End Class

 

说起来mongodb的连接可以分几步,根据连接字符串打开链接,获取数据库,获取文档,进而在文档的基础上进行增删改查。对于VB.NET操作mongodb,完全是根据C#的操作范例,根据vb.net的语法特点临摹出来的。

首先需要对项目进行Nuget包的安装,我们要搜寻的是MongoDB.Driver

技术图片

  • 这里创建了一个vb.net 的 泛型类vbmongoT,只写了单个查找,查找列表和更新操作,函数中大量成对出现了Async和Await关键字,用于标识该功能使用了异步编程,在窗体程序中进行调用的时候,仍需要在成对的使用Async Await的关键字,因为异步函数返回的往往是Task类型(c#)或者 Task(Of TResult) (vb.net)需要在调用函数体中使用await关键字拿到最终结果Imports MongoDB.BsonImports MongoDB.Driver
Public Class vbmongoT(Of T)
    Public client
    Public collection As IMongoCollection(Of T)
    Public database As IMongoDatabase
    Public mlist As List(Of T)
    Public builder As FilterDefinitionBuilder(Of T) = New FilterDefinitionBuilder(Of T)
    Public up As UpdateDefinitionBuilder(Of T)
    Public updef As UpdateDefinition(Of T)
    Public filter As FilterDefinition(Of T)
    Public Sub New(ByVal dbname As String, ByVal collectionname As String)
        client = New MongoClient("mongodb://127.0.0.1:27017")
        database = client.GetDatabase(dbname)
        collection = database.GetCollection(Of T)(collectionname)
    End Sub

    Public Async Function loadrecords() As Task(Of List(Of T))
        filter = builder.Ne(Of ObjectId)("_id", New ObjectId())
        Dim mlist As List(Of T) = Await collection.Find(filter).ToListAsync()
        Return mlist
    End Function
    Public Async Function loadone(ByVal _id As String) As Task(Of T)
        filter = builder.Eq(Of ObjectId)("_id", New ObjectId(_id))//_id满足查找条件的记录,Builder的大多数条件设置函数都用到了泛型:例如Ne(Of TField)
Dim mlist As T = Await collection.Find(filter).FirstOrDefaultAsync()
Return mlist
End Function
Public Async Function updateone(ByVal filter As FilterDefinition(Of T), ByVal updef As UpdateDefinition(Of T)) As Task(Of T)
updef = up.Set(Of String)("content", doc.content) .Set(Of String)("content", doc)
Await collection.UpdateOneAsync(filter, updef)
End Function
End Class

在mongodb这一版本的官方API里,IMongoCollection对象是查找,添加,更新,删除等动作的发起者,这里面查找,更新,删除都要用到查询条件,

官方谓之filter(过滤器)C#: FilterDefinition   VB.net: FilterDefinition (Of T)

而过滤器是过滤器模具的建模结果

过滤器模具:C#: FilterDefinitionBuilder   VB.net: FilterDefinitionBuilder (Of T)

在Mongodb.Driver这个大类下面      建议直接翻看FilterDefinitionBuilder的介绍    https://mongodb.GitHub.io/mongo-csharp-driver/2.10/apidocs/html/T_MongoDB_Driver_FilterDefinitionBuilder_1.htm

同样的数据库文档的更新操作由  UpdateDefinitionBuilder  设置更新字段后产生的  UpdateDefinition完成

  •  窗体程序部分

 

技术图片

Imports MongoDB.Bson
Imports MongoDB.Driver

Public Class FORM1
    Public client
    Public bsdoc As vbtest
    Public collection As IMongoCollection(Of vbtest)
    Public database As IMongoDatabase
    Public mlist As List(Of vbtest)
    Public builder As FilterDefinitionBuilder(Of vbtest) = New FilterDefinitionBuilder(Of vbtest)
    Public vm As vbmongoT(Of vbtest) = New vbmongoT(Of vbtest)("meandmycoach", "vbtest")
    Public filter As FilterDefinition(Of vbtest)
    Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        bsdoc.content = RichTextBox1.Text
        vm.filter = vm.builder.Eq(Of ObjectId)("_id", New ObjectId(ComboBox1.Text))
        vm.up = New UpdateDefinitionBuilder(Of vbtest)
        vm.updef = vm.up.Set(Of String)("content", bsdoc.content)
        vm.up.Set(Of String)("content", bsdoc.content)
        vm.updef = vm.up.Combine(vm.updef)
        vm.updateone(vm.filter, vm.updef)

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        vm = New vbmongoT(Of vbtest)("meandmycoach", "vbtest")
        Dim bsdoc As vbtest = New vbtest()
    End Sub

    Private Async Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
        mlist = Await vm.loadrecords()
        For i As Integer = 0 To mlist.Count - 1
            ComboBox1.Items.Add(mlist(i)._id.ToString())
        Next
        ComboBox1.Text = ComboBox1.Items(0)
        Label2.Text = mlist.Count.ToString()
    End Sub

    Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged

    End Sub

    Private Async Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
        bsdoc = Await vm.loadone(ComboBox1.Text)
        RichTextBox1.Text = bsdoc.content
    End Sub

    Private Async Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged

    End Sub
End Class

功能描述:通过点击图片,加载所有的vbtest文档记录,combobox1专门用于显示ObjectId,可以通过ToString()方法转换为普通字符串

随着下拉框ObjectId的改变,richtext1控件加载 vbtest实体类对应记录的Content字段,可以更改字段内容后 点击 更新提交 按钮完成文档的UpdateOneAsync操作

 

vs2019 下用 vb.net窗体程序连接 mongodb4.2

原文地址:Https://www.cnblogs.com/saintdingspage/p/13437549.html

您可能感兴趣的文档:

--结束END--

本文标题: vs2019 下用 vb.net窗体程序连接 mongodb4.2

本文链接: https://lsjlt.com/news/7699.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vs2019 下用 vb.net窗体程序连接 mongodb4.2
    说起来,查看Mongodb官方的接口文档是场噩梦,尽管mongodb官方花了大力气整顿了它的API,但是简单的接口罗列,0代码示范,让人无从开始。幸亏有很多天才,成功破译,我才得以沿着他们走的路,照猫画虎的走下去。整个项目结构如下: 类...
    99+
    2018-10-16
    vs2019 下用 vb.net窗体程序连接 mongodb4.2 数据库入门 数据库基础教程 数据库 mysql
  • vs2019中使用MFC构建简单windows窗口程序
    微软基础类库(英语: Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,...
    99+
    2024-04-02
  • 怎么在vs2019中使用MFC构建一个windows窗口程序
    怎么在vs2019中使用MFC构建一个windows窗口程序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。微软基础类库(英语: Classes,简称MFC)是微软公司提供的一个...
    99+
    2023-06-15
  • c#窗体应用程序怎么打包
    问题:如何打包 c# 窗体应用程序?答案:通过 visual studio 发布应用程序,选择文件夹作为部署目标,配置发布设置,生成发布包并将其安装在目标计算机上。具体步骤:发布应用程序...
    99+
    2024-05-12
    c#
  • C#Windows应用程序开发创建窗体
    本篇内容主要讲解“C#Windows应用程序开发创建窗体”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#Windows应用程序开发创建窗体”吧!C#Windows应用程序开发之创建窗体的前言:...
    99+
    2023-06-18
  • C#Windows应用程序开发实现窗体控件
    本篇内容主要讲解“C#Windows应用程序开发实现窗体控件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#Windows应用程序开发实现窗体控件”吧!通常windows应用程序都有相似的特征...
    99+
    2023-06-18
  • 小程序wx.getUserProfile接口的具体使用
    最近微信小程序对于审核小程序提出了带有wx.login、wx.getUserInfo接口的调整,并提出了一个新的接口供开发者调用 下图是对于新的接口的官方文档详情 点击前往官网查看更...
    99+
    2024-04-02
  • C#开发Windows窗体应用程序的简单操作步骤
    使用C#开发应用程序时,一般包括创建项目、界面设计、设置属性、编写程序代码、保存项目、程序运行等6个步骤。 1.创建项目 在Visual Studio2017开发环境中选择“文件”→...
    99+
    2024-04-02
  • Python+Qt身体特征识别人数统计源码窗体程序(使用步骤)
    目录前言一、所需工具软件          二、使用步骤1.引入库2.识别特征图像3.识别参...
    99+
    2022-12-21
    Python+Qt身体特征识别人数统计 Python 识别人数统计
  • Flex应用程序如何连接数据
    这篇文章主要介绍了Flex应用程序如何连接数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Flex应用程序连接数据请记住,在Flex应用程序中对数据的操作最重要的事情是:F...
    99+
    2023-06-17
  • 小程序WebSocket长连接如何应用
    本篇内容主要讲解“小程序WebSocket长连接如何应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“小程序WebSocket长连接如何应用”吧!  小程序的架构非常简单,这里有两条网络同步,一...
    99+
    2023-06-26
  • 云服务器怎么连接应用程序
    云服务器连接应用程序的主要方式有以下几种:1. 远程桌面连接:使用远程桌面协议(如RDP,VNC等)连接到云服务器,在服务器上操作应...
    99+
    2023-09-26
    云服务器
  • 树莓派3_win10下使用"远程桌面连接
    -----------------------------------------------------------学无止境------------------------------------------------------ 前...
    99+
    2023-01-30
    远程桌面 树莓派
  • 手机远程连接腾讯云服务器关窗口远程就没用
    如果您想使用手机远程连接腾讯云服务器,但手机无法连接到服务器,可能是因为腾讯云服务器关闭了远程连接功能。以下是可能导致这一情况的解决办法: 确认您的手机是否有网络连接。可以尝试重启您的手机或者通过其他方式重新连接。 尝试在另一台设备上登...
    99+
    2023-10-27
    腾讯 没用 窗口
  • ubuntu用wifi连接android调试程序的步骤
    注:如果没有 root 权限也是可以试试,一般情况下,都需要 root 权限,才能连接成功。 1.需要确保你的开发 PC 和 Android 手机都连上了 wifi 并处于同一...
    99+
    2022-06-06
    ubuntu 程序 Android
  • MongoDB Atlas 未与我的 golang 应用程序连接
    亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《MongoDB Atlas 未与我的 golang 应用程序连接》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋...
    99+
    2024-04-04
  • 手机远程连接腾讯云服务器关窗口远程就没用吗
    然而,尽管远程技术有着诸多优势,但是仍然有一些人认为远程连接可能并不能完全满足他们的需求。对于这些人来说,远程连接可能并不是他们所期望的。因此,我们可以从这方面入手,探讨一下为什么远程连接不能完全满足人们的需求。 首先,远程连接可能并不能...
    99+
    2023-10-28
    腾讯 没用 窗口
  • 如何使用ftp程序连接美国服务器
    使用ftp程序连接美国服务器的方法:1、打开ftp应用程序;2、在ftp应用程序的菜单栏中找到并点击“站点”选项;3、在弹窗中填写站点名、美国服务器ip地址、端口以及用户名密码,点击“连接”即可。具体内容如下:1、首先打开ftp应用程序,进...
    99+
    2024-04-02
  • 小程序连接MQTT进行通信(保证能用)
    一、MQTT通信介绍 MQTT 是一种基于客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与机器的通信(M2M)以及物联...
    99+
    2023-08-17
    小程序
  • Linux下如何安装使用最适合程序员的编程字体
    小编给大家分享一下Linux下如何安装使用最适合程序员的编程字体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JetBrains Mono 是 JetBrains...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作