MongoDB For WPF/Silverlight

本文详细介绍了如何使用C#语言和Samus驱动连接MongoDB数据库,通过实例代码展示了如何存取数据,包括添加、更新和删除操作。文章最后提供了存取'HelloWorld!'的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


 --以下借用于 http://www.cnblogs.com/lipan/archive/2011/03/08/1977691.html

   传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,MongoDB是由(database)、集合(collection)、文档对象(document)三个层次组成。MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。

一、关于MongoDB的驱动

  MongoDB支持多种语言的驱动,在此我们只介绍C#的驱动。仅C#驱动都有很多种,每种驱动的形式大致相同,但是细节各有千秋,因此代码不能通用。比较常用的是官方驱动和samus驱动。samus驱动除了支持一般形式的操作之外,还支持linq方式操纵数据。各人比较喜欢这种方式。

  官方驱动下载地址:点击下载
  samus驱动下载地址:点击下载

  本篇将从samus驱动入手讲解数据库访问,国际惯例,存取“Hello World!”。

二、通过samus驱动实现HelloWorld存取

  在进行下述操作之前,请先确定MongoDB服务已经开启,不知道怎么开启服务,请看上篇。下载驱动,新建控制台项目,并添加对MongoDB.dll的引用,如果你下载的是驱动源码,编译一遍引用生成的DLL即可。

 -----------------------------------------------------------

实例代码如下:

using MongoDB;

 /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        //链接字符串 
        private string connectionString = "mongodb://localhost";
        //数据库名 
        private string databaseName = "myDatabase";
        //集合名 
        string collectionName = "myCollection";
        //定义Mongo服务 
        Mongo mongo;
        MongoDatabase mDatabase;
        MongoCollection<Document> mCollection;
        public MainWindow()
        {
            InitializeComponent();
            mongo = new Mongo(connectionString);
            //获取databaseName对应的数据库,不存在则自动创建  
            mDatabase = mongo.GetDatabase(databaseName) as MongoDatabase;
            mCollection = mDatabase.GetCollection<Document>(collectionName) as MongoCollection<Document>;
            mongo.Connect();

        }
        ~MainWindow()
        {
            mongo.Disconnect();
        }

        private void rb_add_Click(object sender, RoutedEventArgs e)
        {
            tb_Name.IsEnabled = true;
        }

        private void rb_update_Click(object sender, RoutedEventArgs e)
        {
            tb_Name.IsEnabled = true;
        }

        private void rb_del_Click(object sender, RoutedEventArgs e)
        {
            tb_Name.IsEnabled = false;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

            if (rb_add.IsChecked.HasValue && rb_add.IsChecked.Value)
            {
                Document doc = mCollection.FindOne(new Document { { "ID", tb_ID.Text.Trim() } });
                if (doc != null && doc.Count > 0)
                {
                    doc["Name"] = tb_Name.Text.Trim();
                    mCollection.Save(doc);
                }
                else
                {
                    Document addDoc = new Document();
                    addDoc["ID"] = tb_ID.Text.Trim();
                    addDoc["Name"] = tb_Name.Text.Trim();
                    mCollection.Insert(addDoc);
                }
            }
            if (rb_update.IsChecked.HasValue && rb_update.IsChecked.Value)
            {
                Document doc = mCollection.FindOne(new Document { { "ID", tb_ID.Text.Trim() } });
                if (doc != null && doc.Count > 0)
                {
                    doc["Name"] = tb_Name.Text.Trim();
                    mCollection.Save(doc);
                }
            }
            if (rb_del.IsChecked.HasValue && rb_del.IsChecked.Value)
            {
                Document doc = mCollection.FindOne(new Document { { "ID", tb_ID.Text.Trim() } });
                if (doc != null && doc.Count > 0)
                {
                    mCollection.Remove(doc);
                }
            }

            var allResult = mCollection.FindAll().Documents;
            lb_result.Items.Clear();
            foreach (Document item in allResult)
            {
                lb_result.Items.Add(item["ID"] + "   " + item["Name"]);
            } 
        }
    }

 

XAML 代码

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="Mongodb.MainWindow"
        Title="MainWindow" Height="350" Width="374">
    <Grid>
    	<TextBlock HorizontalAlignment="Left" Margin="72,49,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="30.557"><Run Language="zh-cn" Text="ID:"/></TextBlock>
    	<TextBox x:Name="tb_ID" Margin="106.557,43,0,0" TextWrapping="Wrap" Text="1" VerticalAlignment="Top" HorizontalAlignment="Left" Width="214.487"/>
    	<TextBlock HorizontalAlignment="Left" Margin="49,68.836,0,0" TextWrapping="Wrap" VerticalAlignment="Top"><Run Language="zh-cn" Text="Name:"/></TextBlock>
    	<TextBox x:Name="tb_Name" Margin="106.557,68.836,0,0" TextWrapping="Wrap" Text="seelingzheng" VerticalAlignment="Top" HorizontalAlignment="Left" Width="214.487"/>
    	<Button Content="OK" Click="Button_Click"  HorizontalAlignment="Right" Margin="0,119,162,0" VerticalAlignment="Top" Width="75"/>
    	<RadioButton x:Name="rb_add" Click="rb_add_Click"  Content="Add" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="72,17.163,0,0" IsChecked="True"/>
    	<RadioButton x:Name="rb_update" Click="rb_update_Click"  Content="update" Margin="131.853,17.163,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
    	<RadioButton x:Name="rb_del" Click="rb_del_Click"  Content="del" Margin="211.853,17.163,0,0" VerticalAlignment="Top" HorizontalAlignment="Left"/>
    	<ListBox x:Name="lb_result"  Height="100" Margin="23,0,0,56" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="307"/>
        
    </Grid>
</Window>


 结果图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seelingzheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值