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

edf785913ea463b60ad5cee71bf53317.png

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

b3bb3259a7fd42f5de9cad10162c4cd7.png

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

ImportsMongoDB.BsonPublic ClassvbtestPublic _id AsObjectIdPublic content As String

End Class

8402c4502d3157fcd73493f45790aef2.png

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

ImportsMongoDB.BsonImportsMongoDB.DriverPublic ClassvbmongoPublicclientPublic collection As IMongoCollection(Ofvbtest)Public database AsIMongoDatabasePublic mlist As List(Ofvbtest)Public builder As FilterDefinitionBuilder(Of vbtest) = New FilterDefinitionBuilder(Ofvbtest)Public filter As FilterDefinition(Ofvbtest)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(Ofvbtest)(collectionname)End Sub

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

Public Async Function loadone(ByVal _id As String) As Task(Ofvbtest)filter = builder.Eq(Of ObjectId)("_id", NewObjectId(_id))Dim mlist As vbtest = Await collection.Find(filter).FirstOrDefaultAsync()ReturnmlistEnd Function

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

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

60d52e8d1b52c8021cabca750b0d63ce.png

这里创建了一个vb.net 的 泛型类vbmongoT,只写了单个查找,查找列表和更新操作,函数中大量成对出现了Async和Await关键字,用于标识该功能使用了异步编程,在窗体程序中进行调用的时候,仍需要在成对的使用Async Await的关键字,因为异步函数返回的往往是Task类型(c#)或者 Task(Of TResult) (vb.net)需要在调用函数体中使用await关键字拿到最终结果ImportsMongoDB.BsonImportsMongoDB.Driver

Public Class vbmongoT(OfT)PublicclientPublic collection As IMongoCollection(OfT)Public database AsIMongoDatabasePublic mlist As List(OfT)Public builder As FilterDefinitionBuilder(Of T) = New FilterDefinitionBuilder(OfT)Public up As UpdateDefinitionBuilder(OfT)Public updef As UpdateDefinition(OfT)Public filter As FilterDefinition(OfT)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(OfT)(collectionname)End Sub

Public Async Function loadrecords() As Task(Of List(OfT))filter = builder.Ne(Of ObjectId)("_id", NewObjectId())Dim mlist As List(Of T) = Await collection.Find(filter).ToListAsync()ReturnmlistEnd Function

Public Async Function loadone(ByVal _id As String) As Task(OfT)filter = builder.Eq(Of ObjectId)("_id", NewObjectId(_id))//_id满足查找条件的记录,Builder的大多数条件设置函数都用到了泛型:例如Ne(Of TField)

Dim mlist As T = Await collection.Find(filter).FirstOrDefaultAsync()ReturnmlistEnd Function

Public Async Function updateone(ByVal filter As FilterDefinition(Of T), ByVal updef As UpdateDefinition(Of T)) As Task(OfT)‘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完成

窗体程序部分

29305aa4791e29d6872a334f15bda1f9.png

ImportsMongoDB.BsonImportsMongoDB.DriverPublic ClassForm1PublicclientPublic bsdoc AsvbtestPublic collection As IMongoCollection(Ofvbtest)Public database AsIMongoDatabasePublic mlist As List(Ofvbtest)Public builder As FilterDefinitionBuilder(Of vbtest) = New FilterDefinitionBuilder(Ofvbtest)Public vm As vbmongoT(Of vbtest) = New vbmongoT(Of vbtest)("meandmycoach", "vbtest")Public filter As FilterDefinition(Ofvbtest)Private Async Sub Button1_Click(sender As Object, e As EventArgs) HandlesButton1.Click

bsdoc.content=RichTextBox1.Text

vm.filter= vm.builder.Eq(Of ObjectId)("_id", NewObjectId(ComboBox1.Text))

vm.up= New UpdateDefinitionBuilder(Ofvbtest)

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 = Newvbtest()End Sub

Private Async Sub PictureBox1_Click(sender As Object, e As EventArgs) HandlesPictureBox1.Click

mlist=Await vm.loadrecords()For i As Integer = 0 To mlist.Count - 1ComboBox1.Items.Add(mlist(i)._id.ToString())NextComboBox1.Text= ComboBox1.Items(0)

Label2.Text=mlist.Count.ToString()End Sub

Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) HandlesRichTextBox1.TextChangedEnd Sub

Private Async Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) HandlesComboBox1.TextChanged

bsdoc=Await vm.loadone(ComboBox1.Text)

RichTextBox1.Text=bsdoc.contentEnd Sub

Private Async Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) HandlesComboBox1.SelectedIndexChangedEnd Sub

End Class

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值