八、.net core 通过数据库配置文件连接操作数据库
一、创建DotNetCore项目
直接创建core项目并不勾选docker支持
二、nuget进行连接MySQL程序集的下载安装
1、MySql.Data.EntityFrameworkCore方式
- MySql.Data.EntityFrameworkCore
2、Pomelo.EntityFrameworkCore.MySql方式
3、MySql.Data方式
1、搜索
2、在 控制器里面写入操作
引用
- public IActionResult Index()
- {
- DataTable dt = new DataTable();
- DataSet ds = new DataSet();
- try
- {
- using (MySqlConnection con = new MySqlConnection("Data Source=47.94.174.85;User ID=testDb;Password=testDb;Database=testDb;Allow User Variables=True;Charset=utf8;"))
- {
- if (con.State != ConnectionState.Open)
- con.Open();
- MySqlDataAdapter sda = new MySqlDataAdapter("select * from friends", con);
- sda.Fill(ds);
- con.Close();
- }
- }
- catch (Exception ex)
- {
- string s = ex.Message;
- }
- return View();
- }
3、调试运行并查看结果
具体查看结果视图方式
三、通过类库方式
1、创建SqlHelp类库并添加Mysql.Data程序集
在SqlHelp类库下创建MysqlHelp.cs类并添加通用数据库操作代码
- using MySql.Data.MySqlClient;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SqlHelp
- {
- public abstract class MySqlHelper
- {
- //数据库连接字符串
- public static string Conn = "Database='testDb';Data Source='47.94.174.85';User Id='testDb';Password='testDb';charset='utf8';pooling=true";
- // 用于缓存参数的HASH表
- private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
- /// <summary>
- /// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
- /// </summary>
- /// <param name="connectionString">一个有效的连接字符串</param>
- /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
- /// <param name="cmdText">存储过程名称或者sql命令语句</param>
- /// <param name="commandParameters">执行命令所用参数的集合</param>
- /// <returns>执行命令所影响的行数</returns>
- public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
- {
- MySqlCommand cmd = new MySqlCommand();
- using (MySqlConnection conn = new MySqlConnection(connectionString))
- {
- PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
- int val = cmd.ExecuteNonQuery();
- cmd.Parameters.Clear();
- return val;
- }
- }
- /// <summary>
- /// 用现有的数据库连接执行一个sql命令(不返回数据集)
- /// </summary>
- /// <param name="connection">一个现有的数据库连接</param>
- /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
- /// <param name="cmdText">存储过程名称或者sql命令语句</param>
- /// <param name="commandParameters">执行命令所用参数的集合</param>
- /// <returns>执行命令所影响的行数</returns>
- public static int ExecuteNonQuery(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
- {
- MySqlCommand cmd = new MySqlCommand();
- PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
- int val = cmd.ExecuteNonQuery();
- cmd.Parameters.Clear();
- return val;
- }
- /// <summary>
- ///使用现有的SQL事务执行一个sql命令(不返回数据集)
- /// </summary>
- /// <remarks>
- ///举例:
- /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
- /// </remarks>
- /// <param name="trans">一个现有的事务</param>
- /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
- /// <param name="cmdText">存储过程名称或者sql命令语句</param>
- /// <param name="commandParameters">执行命令所用参数的集合</param>
- /// <returns>执行命令所影响的行数</returns>
- public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
- {
- MySqlCommand cmd = new MySqlCommand();
- PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
- int val = cmd.ExecuteNonQuery();
- cmd.Parameters.Clear();
- return val;
- }
- /// <summary>
- /// 用执行的数据库连接执行一个返回数据集的sql命令
- /// </summary>
- /// <remarks>
- /// 举例:
- /// MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
- /// </remarks>
- /// <param name="connectionString">一个有效的连接字符串</param>
- /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
- /// <param name="cmdText">存储过程名称或者sql命令语句</param>
- /// <param name="commandParameters">执行命令所用参数的集合</param>
- /// <returns>包含结果的读取器</returns>
- public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
- {
- //创建一个MySqlCommand对象
- MySqlCommand cmd = new MySqlCommand();
- //创建一个MySqlConnection对象
- MySqlConnection conn = new MySqlConnection(connectionString);
- //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
- //因此commandBehaviour.CloseConnection 就不会执行
- try
- {
- //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数
- PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
- //调用 MySqlCommand 的 ExecuteReader 方法
- MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
- //清除参数
- cmd.Parameters.Clear();
- return reader;
- }
- catch
- {
- //关闭连接,抛出异常
- conn.Close();
- throw;
- }
- }
- /// <summary>
- /// 返回DataSet
- /// </summary>
- /// <param name="connectionString">一个有效的连接字符串</param>
- /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
- /// <param name="cmdText">存储过程名称或者sql命令语句</param>
- /// <param name="commandParameters">执行命令所用参数的集合</param>
- /// <returns></returns>
- public static DataSet GetDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
- {
- //创建一个MySqlCommand对象
- MySqlCommand cmd = new MySqlCommand();
- //创建一个MySqlConnection对象
- MySqlConnection conn = new MySqlConnection(connectionString);
- //在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
- try
- {
- //调用 PrepareCommand 方法,对 MySqlCommand 对象设置参数
- PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
- //调用 MySqlCommand 的 ExecuteReader 方法
- MySqlDataAdapter adapter = new MySqlDataAdapter();
- adapter.SelectCommand = cmd;
- DataSet ds = new DataSet();
- adapter.Fill(ds);
- //清除参数
- cmd.Parameters.Clear();
- conn.Close();
- return ds;
- }
- catch (Exception e)
- {
- throw e;
- }
- }
- /// <summary>
- /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
- /// </summary>
- /// <remarks>
- ///例如:
- /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
- /// </remarks>
- ///<param name="connectionString">一个有效的连接字符串</param>
- /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
- /// <param name="cmdText">存储过程名称或者sql命令语句</param>
- /// <param name="commandParameters">执行命令所用参数的集合</param>
- /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
- public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
- {
- MySqlCommand cmd = new MySqlCommand();
- using (MySqlConnection connection = new MySqlConnection(connectionString))
- {
- PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
- object val = cmd.ExecuteScalar();
- cmd.Parameters.Clear();
- return val;
- }
- }
- /// <summary>
- /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
- /// </summary>
- /// <remarks>
- /// 例如:
- /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24));
- /// </remarks>
- /// <param name="connection">一个存在的数据库连接</param>
- /// <param name="cmdType">命令类型(存储过程, 文本, 等等)</param>
- /// <param name="cmdText">存储过程名称或者sql命令语句</param>
- /// <param name="commandParameters">执行命令所用参数的集合</param>
- /// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
- public static object ExecuteScalar(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters)
- {
- MySqlCommand cmd = new MySqlCommand();
- PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
- object val = cmd.ExecuteScalar();
- cmd.Parameters.Clear();
- return val;
- }
- /// <summary>
- /// 将参数集合添加到缓存
- /// </summary>
- /// <param name="cacheKey">添加到缓存的变量</param>
- /// <param name="commandParameters">一个将要添加到缓存的sql参数集合</param>
- public static void CacheParameters(string cacheKey, params MySqlParameter[] commandParameters)
- {
- parmCache[cacheKey] = commandParameters;
- }
- /// <summary>
- /// 找回缓存参数集合
- /// </summary>
- /// <param name="cacheKey">用于找回参数的关键字</param>
- /// <returns>缓存的参数集合</returns>
- public static MySqlParameter[] GetCachedParameters(string cacheKey)
- {
- MySqlParameter[] cachedParms = (MySqlParameter[])parmCache[cacheKey];
- if (cachedParms == null)
- return null;
- MySqlParameter[] clonedParms = new MySqlParameter[cachedParms.Length];
- for (int i = 0, j = cachedParms.Length; i < j; i++)
- clonedParms[i] = (MySqlParameter)((ICloneable)cachedParms[i]).Clone();
- return clonedParms;
- }
- /// <summary>
- /// 准备执行一个命令
- /// </summary>
- /// <param name="cmd">sql命令</param>
- /// <param name="conn">OleDb连接</param>
- /// <param name="trans">OleDb事务</param>
- /// <param name="cmdType">命令类型例如 存储过程或者文本</param>
- /// <param name="cmdText">命令文本,例如:Select * from Products</param>
- /// <param name="cmdParms">执行命令的参数</param>
- private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdType, string cmdText, MySqlParameter[] cmdParms)
- {
- if (conn.State != ConnectionState.Open)
- conn.Open();
- cmd.Connection = conn;
- cmd.CommandText = cmdText;
- if (trans != null)
- cmd.Transaction = trans;
- cmd.CommandType = cmdType;
- if (cmdParms != null)
- {
- foreach (MySqlParameter parm in cmdParms)
- cmd.Parameters.Add(parm);
- }
- }
- }
- }
2、引用SqlHelp类库
注意:
引用的时候会报错
解决方案:
这是因为SqlHelp类库的Core sdk2.1版本对应的项目的Core sdk2.0版本不对,解决方案
右击类库属性
选择项目对应的2.0即可
或者
创建类库的时候选择
3、控制器里面写查询方法
- public IActionResult Index()
- {
- DataTable db = MySqlHelper.GetDataSet(MySqlHelper.Conn, CommandType.Text, "select * from friends", null).Tables[0];
- return View();
- }
结果
注意:
则也需要添加Mysql.Data程序集
总结具体:
1、创建名为SqlHelp的.Net FrameWork类库添加引用MySql.Data程序集的引用。
2、在SqlHelp类库下创建MysqlHelper类写入公共数据库操作类方法
3、在项目中引用MysqlHelper类并使用(也需要引用MySql.Data程序集)
八、.net core 通过数据库配置文件连接操作数据库的更多相关文章
- python 连接操作数据库(二)
一.我们接着上期的博客继续对ORM框架进行补充,顺便把paramiko模块也给大家讲解一下: 1.ORM框架: 在连接操作数据库的第一个博客中也已经说了,sqlalchemy是一个ORM框架,总结就是 ...
- 第二百七十九节,MySQL数据库-pymysql模块操作数据库
MySQL数据库-pymysql模块操作数据库 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connec ...
- python 连接操作数据库(一)
一.下面我们所说的就是连接mysql的应用: 1.其实在python中连接操作mysql的模块有多个,在这里我只给大家演示pymysql这一个模块(其实我是感觉它比较好用而已): pymysql是第三 ...
- PHP读取配置文件连接MySQL数据库
读取配置文件方法parse_ini_file($filepath [,$section]) 代码: conn.php <?php //连接数据库 //$conn =new mysqli('loc ...
- JAVA采用JDBC连接操作数据库详解
JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...
- SQL语言(二) java怎样连接操作数据库中的数据
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.S ...
- 使用JDBC连接操作数据库
JDBC简介 Java数据库连接(Java Database Connectivity,JDBC),是一种用于执行SQL语句的Java API,它由一组用Java编程语言编写的类和接口组成. JDBC ...
- JDBC连接-操作数据库
JDBC连接数据库的操作步骤 *条件:先启动mysql,然后创建新连接.这里我用Navicat工具来操作数据库. 前面是创建数据库,以及授权的问题.然后打开eclipse 这里我整理一下 抛出的两个异 ...
- Java数据库之数据库的连接操作
这里面我们所连接的数据库是mysql数据库,Oracle数据库暂且先不讨论,并且mysql中的基本语法,这里面也不在一一表述了,但是看这篇文章之前,最好先仔细的连接mysql的基本语法,看起来方便~ ...
随机推荐
- 001_python单元测试
一.同事推荐的 pytest库 ==> 官网:http://doc.pytest.org/en/latest/ github地址==>https://github.com/pytest-d ...
- Troubleshooting ORA-12547 TNS: Lost Contact (Doc ID 555565.1)
Troubleshooting ORA-12547 TNS: Lost Contact (Doc ID 555565.1) This error can occur in following scen ...
- Linux中断管理 (1)Linux中断管理机制
目录: <Linux中断管理> <Linux中断管理 (1)Linux中断管理机制> <Linux中断管理 (2)软中断和tasklet> <Linux中断管 ...
- face detection[HR]
该模型hybrid-resolution model (HR),来自<finding tiny faces>,时间线为2016年12月 0 引言 虽然大家在目标识别上有了较好的进步,可是检 ...
- AQS实现原理分析——ReentrantLock
在Java并发包java.util.concurrent中可以看到,不少源码是基于AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是Java并发包的基础工具类, ...
- 两个select之间的元素互相移动并保持顺序
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- SpringBoot开发案例之整合Dubbo分布式服务
前言 在 SpringBoot 很火热的时候,阿里巴巴的分布式框架 Dubbo 不知是处于什么考虑,在停更N年之后终于进行维护了.在之前的微服务中,使用的是当当维护的版本 Dubbox,整合方式也是使 ...
- Grafana+Prometheus打造全方位立体监控系统
前言 本文主要介绍如何使用Grafana和Prometheus以及node_exporter对Linux服务器性能进行监控.下面两张图分别是两台服务器监控信息: 服务器A 服务器B 概述 Promet ...
- koa-router
为了处理URL,我们需要引入koa-router这个middleware,让它负责处理URL映射. 我们把上一节的hello-koa工程复制一份,重命名为url-koa. 先在package.json ...
- threading模块,python下的多线程
一.GIL全局解释器锁 In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple nativ ...