You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何在MVC中执行指定SQL查询语句

嘿,作为MVC新手,我来一步步帮你搞定这条SQL查询的执行,分几个简单的步骤来~

第一步:先验证SQL本身是否能正常运行

在动手写MVC代码之前,先确保你的SQL语句是没问题的。打开你的数据库管理工具(比如SQL Server Management Studio、DBeaver之类的),连接到目标数据库,把这段SQL直接粘进去执行:

SELECT agents.*, zone.State AS ZONE, zonedistrict.District 
FROM (SELECT * FROM ABC('04-01-2018' ,'04-08-2018', '%%', '%%', '', '', '', '', '')) agents 
INNER JOIN SW_TBL_STATE ZONE ON agents.State=ZONE.State_Id 
INNER JOIN SW_TBL_STATEDISTRICT zonedistrict ON agents.District=zonedistrict.District_Id;

如果能正常返回结果,说明SQL本身没问题;如果报错,先排查函数ABC是否存在、参数是否正确,或者表名/字段名有没有拼写错误。

第二步:在MVC项目里执行SQL(两种常见方式)

方式一:用ADO.NET直接执行(新手友好,快速上手)

这种方式不需要依赖ORM框架,直接操作数据库连接:

  1. 配置数据库连接字符串

    • 如果是.NET Core项目,打开appsettings.json,添加连接字符串:
      "ConnectionStrings": {
        "MyDatabase": "Server=你的服务器名称;Database=你的数据库名称;Trusted_Connection=True;"
      }
      
    • 如果是.NET Framework项目,打开Web.config,添加:
      <connectionStrings>
        <add name="MyDatabase" connectionString="Server=你的服务器名称;Database=你的数据库名称;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
      </connectionStrings>
      
  2. 在Controller里写执行代码
    创建一个Controller(比如AgentController),添加方法来执行SQL并返回结果:

    using System.Data;
    using System.Data.SqlClient;
    using Microsoft.AspNetCore.Mvc; // .NET Core 用这个
    // using System.Web.Mvc; // .NET Framework 用这个
    
    public class AgentController : Controller
    {
        public IActionResult GetAgents()
        {
            // 读取连接字符串
            string connStr = Configuration.GetConnectionString("MyDatabase"); // .NET Core
            // string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString; // .NET Framework
    
            DataTable agentData = new DataTable();
    
            // 用using确保连接自动释放
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                string sql = @"SELECT agents.*, zone.State AS ZONE, zonedistrict.District 
                                FROM (SELECT * FROM ABC('04-01-2018' ,'04-08-2018', '%%', '%%', '', '', '', '', '')) agents 
                                INNER JOIN SW_TBL_STATE ZONE ON agents.State=ZONE.State_Id 
                                INNER JOIN SW_TBL_STATEDISTRICT zonedistrict ON agents.District=zonedistrict.District_Id;";
    
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                adapter.Fill(agentData);
            }
    
            // 把数据传给View展示
            return View(agentData);
        }
    }
    
  3. 创建View展示数据
    在Views/Agent文件夹下创建GetAgents.cshtml,用循环遍历DataTable显示数据:

    @model System.Data.DataTable
    
    <h2>Agent List</h2>
    <table>
        <thead>
            <tr>
                @foreach (DataColumn col in Model.Columns)
                {
                    <th>@col.ColumnName</th>
                }
            </tr>
        </thead>
        <tbody>
            @foreach (DataRow row in Model.Rows)
            {
                <tr>
                    @foreach (var item in row.ItemArray)
                    {
                        <td>@item</td>
                    }
                </tr>
            }
        </tbody>
    </table>
    

方式二:用Entity Framework Core(EF Core)执行原始SQL(更符合MVC的ORM风格)

如果你已经在用EF Core,可以用它来执行原始SQL,还能把结果映射到模型类:

  1. 创建ViewModel接收查询结果
    根据SQL返回的字段,创建一个ViewModel类:

    public class AgentViewModel
    {
        // 这里对应你SQL查询返回的所有字段,比如:
        public int AgentId { get; set; }
        public string AgentName { get; set; }
        public string ZONE { get; set; }
        public string District { get; set; }
        // 其他字段根据你的agents表结构补充
    }
    
  2. 在Controller里用DbContext执行SQL
    注入你的DbContext,然后调用FromSqlRaw执行SQL:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    
    public class AgentController : Controller
    {
        private readonly YourDbContext _dbContext;
    
        // 构造函数注入DbContext
        public AgentController(YourDbContext dbContext)
        {
            _dbContext = dbContext;
        }
    
        public async Task<IActionResult> GetAgents()
        {
            string sql = @"SELECT agents.*, zone.State AS ZONE, zonedistrict.District 
                            FROM (SELECT * FROM ABC('04-01-2018' ,'04-08-2018', '%%', '%%', '', '', '', '', '')) agents 
                            INNER JOIN SW_TBL_STATE ZONE ON agents.State=ZONE.State_Id 
                            INNER JOIN SW_TBL_STATEDISTRICT zonedistrict ON agents.District=zonedistrict.District_Id;";
    
            var agents = await _dbContext.Set<AgentViewModel>()
                                         .FromSqlRaw(sql)
                                         .ToListAsync();
    
            return View(agents);
        }
    }
    
  3. 创建View展示ViewModel列表
    同样在Views/Agent下创建GetAgents.cshtml:

    @model List<YourProjectName.Models.AgentViewModel>
    
    <h2>Agent List</h2>
    <table>
        <thead>
            <tr>
                <th>Agent ID</th>
                <th>Agent Name</th>
                <th>Zone</th>
                <th>District</th>
                <!-- 其他字段对应添加 -->
            </tr>
        </thead>
        <tbody>
            @foreach (var agent in Model)
            {
                <tr>
                    <td>@agent.AgentId</td>
                    <td>@agent.AgentName</td>
                    <td>@agent.ZONE</td>
                    <td>@agent.District</td>
                    <!-- 其他字段对应添加 -->
                </tr>
            }
        </tbody>
    </table>
    

几个注意点

  • 记得替换连接字符串里的服务器名和数据库名,确保你的应用有访问数据库的权限
  • 确认数据库里的自定义函数ABC存在,并且参数传递正确(比如日期格式是否符合数据库要求)
  • 如果是.NET Framework和.NET Core的项目,代码细节会有差异,要对应调整

内容的提问来源于stack exchange,提问作者Aayush Rajopadhyaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:42:20