在C#中进行数据库查询是一项常见的任务,通常使用ADO.NET或Entity Framework等技术,下面将通过一个实例来展示如何在C#中进行数据库查询。
假设有一个简单的数据库,其中包含一个名为“Students”的表,该表有以下字段:
字段名 | 数据类型 | 描述 |
StudentID | int | 学生ID |
Name | nvarchar | 学生姓名 |
Age | int | 学生年龄 |
Grade | nvarchar | 学生年级 |
1、引入命名空间:需要引入必要的命名空间。
using System; using System.Data; using System.Data.SqlClient;
2、建立数据库连接:创建一个SqlConnection
对象,用于连接到数据库。
string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"; using (SqlConnection connection = new SqlConnection(connectionString)) { // 后续代码... }
3、创建并执行SQL命令:创建一个SqlCommand
对象,并执行SQL查询。
string query = "SELECT * FROM Students WHERE Age > @Age"; using (SqlCommand command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@Age", 18); // 防止SQL注入 connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine($"Student ID: {reader["StudentID"]}, Name: {reader["Name"]}, Age: {reader["Age"]}, Grade: {reader["Grade"]}"); } reader.Close(); }
使用Entity Framework进行数据库查询
1、安装Entity Framework:确保已安装Entity Framework。
Install-Package EntityFramework
2、定义模型类:根据数据库表结构定义一个模型类。
public class Student { public int StudentID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Grade { get; set; } }
3、配置DbContext:创建一个继承自DbContext
的类,用于与数据库交互。
public class SchoolContext : DbContext { public DbSet<Student> Students { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"); } }
4、执行查询:使用DbContext
执行查询。
using (var context = new SchoolContext()) { var students = context.Students.Where(s => s.Age > 18).ToList(); foreach (var student in students) { Console.WriteLine($"Student ID: {student.StudentID}, Name: {student.Name}, Age: {student.Age}, Grade: {student.Grade}"); } }
展示了两种在C#中进行数据库查询的方法:使用ADO.NET和使用Entity Framework,ADO.NET提供了更底层的控制,适合需要精细控制数据库操作的场景;而Entity Framework则提供了更高级的抽象,使得数据库操作更加简洁和直观,选择哪种方法取决于具体的需求和项目规模。
问:ADO.NET和Entity Framework有什么区别?
答:ADO.NET是Microsoft提供的一组用于访问数据库的类库,它提供了底层的数据库操作功能,适合需要精细控制数据库操作的场景,而Entity Framework则是基于ADO.NET之上的一个ORM(对象关系映射)框架,它提供了更高级的抽象层,使得开发者可以通过操作对象的方式来操作数据库,提高了开发效率和代码可读性,ADO.NET更接近于“手动驾驶”,而Entity Framework则像是“自动驾驶”。
问:为什么推荐使用参数化查询而不是直接拼接字符串来构建SQL命令?
答:推荐使用参数化查询而不是直接拼接字符串来构建SQL命令,主要是为了防止SQL注入攻击,当使用参数化查询时,SQL引擎会将参数值作为独立的数据进行处理,而不是将其直接拼接到SQL命令字符串中,这样,即使参数值中含有反面的SQL代码,也不会被执行,从而大大提高了数据库的安全性,参数化查询还可以提高查询性能,因为数据库可以重用预编译的SQL语句。