aspnetboilerplate && .net core 使用原生sql


利用aspnetboilerplate提供的工具類IDbContextProvider

private readonly IDbContextProvider<XXXDbContext> _provider;
public XXXAppService(IDbContextProvider<XXXDbContext> provider)
{
    _provider = provider;
}
public async Task Query()
{
    var sql="your sql";
    var tableList = _provider.GetDbContext().Query<Class>()
                             .FromSql(sql)
                             .AsNoTracking()
                             .ToList();
}

參考資料

Raw SQL Queries
How to execute a sql string in the application layer

比較原始 && 通用的方式

public class SqlHelper
{

	public DataTable QueryForDatable(string sql)
	{
		SqlConnection conn = new System.Data.SqlClient.SqlConnection();
		conn.ConnectionString = GetConnectionString(conn);
		if (conn.State != ConnectionState.Open)
		{
			conn.Open();
		}

		SqlCommand cmd = new SqlCommand();
		cmd.Connection = conn;
		cmd.CommandText = sql;

		SqlDataAdapter adapter = new SqlDataAdapter(cmd);
		DataTable table = new DataTable();
		adapter.Fill(table);

		conn.Close();
		conn.Dispose();
		return table;

	}

	//簡而言之,拿到數據庫連接字符串
	private static string GetConnectionString(SqlConnection conn)
	{
	        //這里需要拿到appsettings.json所在文件夾路徑
		var currentDirectoryPath = Directory.GetCurrentDirectory();
		var configuration = AppConfigurations.Get(currentDirectoryPath);
		//connectionStringName是數據庫連接字符串在appsettings.json中的對應名稱
		return configuration.GetConnectionString(connectionStringName);
	}

	/// <summary>
	/// SQL 語句返回 dataset
	/// </summary>
	/// <param name="sql"></param>
	/// <returns></returns>
	public DataSet QueryForListDataTable(string sql)
	{
		SqlConnection conn = new SqlConnection();
		conn.ConnectionString = GetConnectionString(conn);
		if (conn.State != ConnectionState.Open)
		{
			conn.Open();
		}
		SqlCommand cmd = new SqlCommand();
		cmd.Connection = conn;
		cmd.CommandText = sql;
		SqlDataAdapter adapter = new SqlDataAdapter(cmd);
		DataSet dataSet = new DataSet();
		adapter.Fill(dataSet);

		conn.Close();
		conn.Dispose();
		return dataSet;
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM