[.Net] 用API存取DB资料

写个存取DB小功能

在Program.cs要先写

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
//todo 解密
//此动作会在Controller建构子注入SqlConnection
builder.Services.AddScoped<IDbConnection>(p => new SqlConnection(connectionString));

在Controller加上

using Microsoft.AspNetCore.Mvc;
using System.Data;

namespace xxxxx.Controllers;

[ApiController]
[Route("[controller]")]
public class DBController : ControllerBase
{
    private readonly IDbConnection Conn;

    public DBController(IDbConnection conn)
    {
        Conn = conn;
    }

    [HttpGet]
    public IActionResult GetData(string script)
    {
        try
        {
            var result = new List<Dictionary<string, object>>();
            Conn.Open();
            using IDbTransaction tran = Conn.BeginTransaction(IsolationLevel.ReadUncommitted);
            using IDbCommand cmd = Conn.CreateCommand();
            cmd.CommandText = script;
            cmd.Transaction = tran;
            using (IDataReader reader = cmd.ExecuteReader())
                while (reader.Read())
                {
                    var rowDict = new Dictionary<string, object>();
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        rowDict[reader.GetName(i)] = reader.GetValue(i);
                    }
                    result.Add(rowDict);
                }
            tran.Rollback();
            return Ok(result);
        }
        catch (Exception ex)
        {
            return StatusCode(500, $"错了: {ex.ToString()}");
        }
    }

    [HttpPost]
    public IActionResult Update(string script, bool commit = false)
    {
        try
        {
            Conn.Open();
            using IDbCommand cmd = Conn.CreateCommand();
            using IDbTransaction tran = Conn.BeginTransaction();
            cmd.CommandText = script;
            cmd.Transaction = tran;
            int count = cmd.ExecuteNonQuery();
            if (commit) tran.Commit();
            else tran.Rollback();
            return Ok($"影响 {count} 笔");
        }
        catch (Exception ex)
        {
            return StatusCode(500, $"错了: {ex.ToString()}");
        }
    }
}

Taiwan is a country. 台湾是我的国家

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章

5 点赞(415) 阅读(67)