请求将指定SQL语句转换为C#可执行SQL查询字符串并获取数据
将SQL转换为C#查询并实现数据获取
首先定义一个实体类,用来接收查询返回的结构化数据:
public class EmployeeTask { public int Emp_id { get; set; } public string ProjectName { get; set; } public string Task_description { get; set; } public string Tasks { get; set; } public string Status { get; set; } }
接下来把SQL语句转为C#的多行字符串(用@符号保留原格式),再通过ADO.NET实现数据查询逻辑:
using System.Data; using System.Data.SqlClient; using System.Collections.Generic; public List<EmployeeTask> GetEmployeeTasks(int empId) { var taskList = new List<EmployeeTask>(); // 替换成你的数据库连接字符串 string connStr = "Server=你的服务器地址;Database=你的数据库名;Integrated Security=True;"; string sql = @"select tsk.Emp_id, tsk.ProjectName, tsk.Task_description, pr.Tasks, pr.Status from dbo.Tasks tsk join dbo.Project pr ON pr.Task_ID=tsk.Task_ID where Emp_id = @emp_id"; using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { // 添加参数,避免SQL注入 cmd.Parameters.Add("@emp_id", SqlDbType.Int).Value = empId; conn.Open(); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { var task = new EmployeeTask { Emp_id = reader.GetInt32(reader.GetOrdinal("Emp_id")), ProjectName = reader.GetString(reader.GetOrdinal("ProjectName")), Task_description = reader.GetString(reader.GetOrdinal("Task_description")), Tasks = reader.GetString(reader.GetOrdinal("Tasks")), Status = reader.GetString(reader.GetOrdinal("Status")) }; taskList.Add(task); } } } } return taskList; }
核心注意点:
- 用
@定义多行字符串,完全保留原SQL的格式,无需手动处理换行转义 - 必须使用参数化查询,绝对不能直接把
empId拼进SQL字符串,防止SQL注入 - 所有数据库对象用
using包裹,确保资源自动释放,避免内存泄漏 reader.GetOrdinal("列名")通过列名获取索引,比硬写数字索引更易维护
使用示例:
// 获取ID为101的员工任务列表 var tasks = GetEmployeeTasks(101); foreach (var item in tasks) { Console.WriteLine($"项目:{item.ProjectName} | 任务描述:{item.Task_description} | 状态:{item.Status}"); }
内容的提问来源于stack exchange,提问作者Developing
相关产品推荐
相关产品推荐

