c#查询
时间: 2025-07-01 12:04:59 浏览: 3
在C#中实现查询操作,主要涉及数据库或集合的查询方式。以下内容涵盖使用MongoDB和SQL Server进行查询的基本方法,并提供示例代码。
### MongoDB 查询示例
在MongoDB中,可以使用`IMongoCollection`接口提供的查询方法来构建复杂的查询条件。动态过滤可以通过构建`FilterDefinitionBuilder`对象来实现,以下是多条件查询的示例:
```csharp
using MongoDB.Driver;
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("testdb");
var collection = database.GetCollection<MyEntity>("mycollection");
var filter = Builders<MyEntity>.Filter.And(
Builders<MyEntity>.Filter.Eq(x => x.Name, "John"),
Builders<MyEntity>.Filter.Gt(x => x.Age, 30)
);
var result = collection.Find(filter).ToList();
```
在这个例子中,通过`Builders<MyEntity>.Filter.And`方法组合了两个查询条件:`Name`等于"John"且`Age`大于30[^1]。查询结果通过`ToList()`方法转换为列表形式。
### SQL Server 查询示例
对于SQL Server数据库,通常使用`SqlCommand`类执行查询,并通过`SqlDataReader`读取数据。以下是一个基本的查询示例:
```csharp
using System.Data.SqlClient;
string connectionString = "your_connection_string";
string query = "SELECT * FROM Users WHERE Age > @Age";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@Age", 30);
try
{
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
DateTime birthDate = reader.GetDateTime(2);
Console.WriteLine($"ID: {id}, Name: {name}, Birth Date: {birthDate}");
}
}
reader.Close();
}
catch (SqlException ex)
{
Console.WriteLine($"SQL错误: {ex.Message}");
}
}
```
在此代码中,查询语句包含参数化查询以防止SQL注入攻击。查询结果通过`SqlDataReader`读取,并根据列的数据类型使用相应的`Get`方法获取值。`HasRows`属性用于检查是否有返回的数据[^2]。
### 异常处理
无论是MongoDB还是SQL Server,在数据库操作过程中都应考虑异常处理,以确保程序的健壮性。例如,在SQL Server查询中捕获`SqlException`和其他类型的异常:
```csharp
try
{
// 数据库操作代码
}
catch (SqlException ex)
{
Console.WriteLine($"SQL错误: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"通用错误: {ex.Message}");
}
```
这段代码展示了如何区分处理特定于SQL Server的异常和其他通用异常[^3]。
### 动态构建查询条件
在实际应用中,可能需要根据用户输入或其他逻辑动态构建查询条件。这可以通过构造表达式树或者使用字符串拼接的方式完成(注意避免SQL注入风险)。对于MongoDB而言,可以利用`FilterDefinitionBuilder`动态添加条件;而对于SQL Server,则可以通过拼接SQL字符串并安全地使用参数化查询来实现。
---
阅读全文
相关推荐
















