
# C#示例
#### 操作场景
DDS支持通过C#语言接口来操作数据，通过C#连接实例的方式有开启SSL认证连接和关闭SSL认证连接两种，其中开启SSL证书连接加密功能，具有更高的安全性。
DDS新实例默认关闭SSL数据加密，开启SSL请参考[开启SSL](https://support.huaweicloud.com/usermanual-dds/dds_03_0074.html#section1)。
本章节主要介绍使用C#语言连接副本集实例的方法。
#### 前提条件
1. 连接数据库的弹性云服务器必须和DDS实例之间网络互通，可以使用curl命令连接DDS实例服务端的IP和端口号，测试网络连通性。 shell
   curl ip:port
   返回"It looks like you are trying to access MongoDB over HTTP on the native driver port."，说明网络互通。
   
2. 如果开启SSL，需要在界面上下载根证书，并上传到弹性云服务器。
 
#### 环境配置及驱动获取
1. **安装** **.NET SDK** : 保证您的环境有.NET SDK。您可以从官方网站进行下载：<https://dotnet.microsoft.com/download>
2. **创建新项目** : 打开终端或命令提示符，创建一个新的.NET 控制台应用程序。
   ```
   dotnet new console -n DDSExample
   cd DDSExample
   ```
   
3. **添加** **MongoDB C#** **驱动程序** : 使用 NuGet 将 MongoDB C# 驱动程序添加到您的项目中。
   ```
   dotnet add package MongoDB.Driver
   ```
   
 
#### 开启和关闭SSL安全连接
- [SSL开启]
  ```
  using MongoDB.Bson;
  using MongoDB.Driver;
  using System;
  using System.Security.Cryptography.X509Certificates;
  using System.Threading.Tasks;
   
  public class MongoDBSecureWriter
  {
      public static async Task Main()
      {
          var connectionString = "mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin&replicaSet=replica";
          var caCertPath = "/path/to/certs/ca.crt";  
          var collectionName = "testCollection";    
   
          try
          {
              var client = CreateSecureClient(connectionString, caCertPath);
              
              var database = client.GetDatabase("mydatabase");
              var collection = database.GetCollection<BsonDocument>(collectionName);
              
              var document = new BsonDocument
              {
                  { "name", "Secure Test" },
                  { "value", 42 },
                  { "timestamp", DateTime.UtcNow }
              };
              
              await collection.InsertOneAsync(document);
              Console.WriteLine($"Insert doc ID: {document["_id"]}");
              
              // 验证写入
              var filter = Builders<BsonDocument>.Filter.Eq("_id", document["_id"]);
              var result = await collection.Find(filter).FirstOrDefaultAsync();
              Console.WriteLine($"result: {(result != null ? "success" : "fail")}");
          }
          catch (Exception ex)
          {
              Console.WriteLine($"Fail: {ex.Message}");
              if (ex.InnerException != null)
              {
                  Console.WriteLine($"Exception: {ex.InnerException.Message}");
              }
          }
      }
   
      private static MongoClient CreateSecureClient(string connectionString, string caCertPath)
      {
          var caCert = new X509Certificate2(caCertPath);
          
          var settings = MongoClientSettings.FromConnectionString(connectionString);
   
          settings.SslSettings = new SslSettings
          {
              CheckCertificateRevocation = false,
              ClientCertificates = new[] { caCert }
          };
          settings.UseTls = true;
          settings.AllowInsecureTls = true;
   
          settings.MaxConnectionPoolSize = 100;
          settings.MinConnectionPoolSize = 10;
          
          return new MongoClient(settings);
      }
  }
  ```
- [SSL关闭]
  ```
  using MongoDB.Driver;
  using MongoDB.Bson;
  using System;
  class Program
  {
      static void Main(string[] args)
      {
          // Replace <YourConnectionString> with your MongoDB connection string
          var connectionString = "mongodb://rwuser:rwuserpassword@ip:port/{mydb}?authSource=admin&replicaSet=replica";
          
          // Create a MongoClient object
          var client = new MongoClient(connectionString);
          
          // Get a reference to the database
          var database = client.GetDatabase("testDatabase");
          
          // Get a reference to a collection
          var collection = database.GetCollection<BsonDocument>("testCollection");
          
          // Create a sample document
          var document = new BsonDocument
          {
              { "name", "DDS" },
              { "type", "Database" },
              { "count", 1 },
              { "versions", new BsonArray { "v3.4", "v4.0", "v4.2" } },
              { "info", new BsonDocument { { "x", 203 }, { "y", 102 } } }
          };
          
          // Insert the document into the collection
          collection.InsertOne(document);
          
          Console.WriteLine("Document inserted successfully!");
      }
  }
  ```
![](https://support.huaweicloud.com/usermanual-dds/public_sys-resources/note_3.0-zh-cn.png)
- URL中的认证数据库必须为"admin"，即"authSource=admin"。

- rwuser账户的认证数据库必须为"admin"，之后再切换至业务数据库。
 
#### 运行程序
在终端或命令提示符使用以下命令运行程序。
```
dotnet run
```
#### 相关文档
[设置SSL数据加密](https://support.huaweicloud.com/usermanual-dds/dds_03_0074.html)
[通过程序代码连接副本集实例](https://support.huaweicloud.com/usermanual-dds/dds_03_0339.html)
