C#之visual studio如何链接并使用mysql


前言

因为工作由C++转为了C#,在此记录一下C#如何链接数据库,后期会考虑数据库的事务问题与线程问题,当前仅仅是一个简单的实现,能用就行。


一、准备工作

1.首先肯定是安装VS和MySql

2.获取Mysql.data.dll
  可以从C:\Program Files (x86)\MySQL\MySQL Installer for Windows目录下找到该文件。如果没有,可以直接下载:下载地址然后解压至某个文件都行

3.添加引用
  找到解决方案资源管理器,右击引用->添加引用
在这里插入图片描述
找到Mysql.data.dll文件,勾选上就可以了
在这里插入图片描述
此时引用栏就会多出MySql.data的信息
在这里插入图片描述
至此准备前的工作就结束了

二、C#使用Sql

1.导入命名空间 using MySql.Data.MySqlClient;

2.配置参数:

  • Server = 服务器IP地址;
  • Database= 数据库名称;
  • UserID= 数据库用户名;
  • Password= 数据库密码;
  • Port= 端口号

3.数据库的连接字符串
常规连接方法:

	string connetStr = "server=127.0.0.1;port=3306;user=root;password=数据库密码; database=test;";
	MySqlConnection conn = new MySqlConnection(connetStr);

但是上面容易写错,可以借用SqlConnectionStringBuilder

SQLConnectionStringBuilder 是一个用于构建 SQL Server 连接字符串的类。通过使用该类,可以更容易地构建和管理 SQL Server 连接字符串。

具体使用如下:

	MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
    builder.UserID = "root";
    builder.Password = "e9t6q4";
    builder.Server = "127.0.0.1";
    builder.Port = 13306;
    builder.Database = "prc_d";
    MySqlConnection m_sqlConnect = new MySqlConnection(builder.ConnectionString);

数据库连接字符串的参数

4.判断数据库是否连接成功

    try
	{
		m_sqlConnect.Open();
		Console.WriteLine("数据库连接成功");//打印信息
	}
	catch (MySqlException ex)
	{
		Console.WriteLine(ex.Message);//打印错误信息
	}

5.数据库读写操作

参数说明
Server,host, data source, datasource, address, addr, network address服务器IP地址
Database,initial catalog数据库名
Portsocket 端口,默认 3306
ConnectionProtocol,protocol连接协议,默认 Sockets
PipeName,pipe连接管道,默认 MYSQL
UseCompression,compress连接是否压缩,默认 false
AllowBatch是否允许一次执行多条SQL语句,默认 true
Logging是否启用日志,默认 false
SharedMemoryName内存共享的名称,默认 MYSQL
UseOldSyntax,old syntax, oldsyntax是否兼容旧版的语法,默认 false
ConnectionTimeout,connection timeout连接超时等待时间,默认15s
DefaultCommandTimeout,command timeoutMySqlCommand 超时时间,默认 30s
UserID, uid, username, user name, user数据库登录帐号
Password,pwd登录密码
PersistSecurityInfo是否保持敏感信息,默认 false
EncryptEncrypt
CertificatePassword证书的密码
CertificateStoreLocation证书的存储位置
CertificateThumbprint证书指纹
AllowZeroDateTime日期时间能否为零,默认 false
ConvertZeroDateTime为零的日期时间是否转化为 DateTime.MinValue,默认 false
UseUsageAdvisor, usage advisor是否启用助手,会影响数据库性能,默认 false
ProcedureCacheSize,procedure cache, procedurecache同一时间能缓存几条存储过程,0为禁止,默认 25
UsePerformanceMonitor,userperfmon, perfmon是否启用性能监视,默认 false
IgnorePrepare是否忽略 Prepare() 调用,默认 true
UseProcedureBodies,procedure bodies是否检查存储过程体、参数的有效性,默认 true
AutoEnlist是否自动使用活动的连接,默认 true
RespectBinaryFlags是否响应列上元数据的二进制标志,默认 true
TreatTinyAsBoolean是否将 TINYINT(1) 列视为布尔型,默认 true
AllowUserVariables是否允许 SQL 中出现用户变量,默认 false
InteractiveSession,interactive会话是否允许交互,默认 false
FunctionsReturnString所有服务器函数是否按返回字符串处理,默认 false
UseAffectedRows是否用受影响的行数替代查找到的行数来返回数据,默认 false
OldGuids是否将 binary(16) 列作为 Guids,默认 false
Keepalive保持 TCP 连接的秒数,默认0,不保持。
ConnectionLifeTime连接被销毁前在连接池中保持的最少时间(秒)。默认 0
Pooling是否使用线程池,默认 true
MinimumPoolSize, min pool size线程池中允许的最少线程数,默认 0
MaximumPoolSize,max pool size线程池中允许的最多线程数,默认 100
ConnectionReset连接过期后是否自动复位,默认 false
CharacterSet, charset向服务器请求连接所使用的字符集,默认:无
TreatBlobsAsUTF8binary blobs 是否按 utf8 对待,默认 false
BlobAsUTF8IncludePattern列的匹配模式,一旦匹配将按 utf8 处理,默认:无
SslMode是否启用 SSL 连接模式,默认:MySqlSslMode.None

6.数据库读写操作
ExcuteReader:执行多行查询,返回DataReader对象

ExcuteScalar:执行单行查询,返回查询结果的首行数据

代码演示

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Data;

namespace text
{
    class DBManager
    {
        //SQL Server 连接字符串的类,可以更容易地构建和管理 SQL Server 连接字符串。
        MySqlConnectionStringBuilder builder = new MySqlConnectionStringBuilder();
        //MySQL 数据库连接的 .NET 客户端库中的类
        private MySqlConnection m_sqlConnect;

        //数据库操作的单例
        private static readonly DBManager m_instance = new DBManager();

        public static DBManager Instance
        {
            get
            {
                return m_instance;
            }
        }

        private DBManager()
        {
            //配置连接数据库所需要的数据
            builder.UserID = "root";
            builder.Password = "e9t6q4";
            builder.Server = "127.0.0.1";
            builder.Port = 13306;
            builder.Database = "prc_d";
            //连接数据库
            m_sqlConnect = new MySqlConnection(builder.ConnectionString);
            Connect();
        }

        ~DBManager()
        {
            Close();
        }

        //数据库是否连接判断
        private bool Connect()
        {
            try
            {
                m_sqlConnect.Open();
                Console.WriteLine("数据库连接成功");//打印信息
            }
            catch (MySqlException ex)
            {
                Console.WriteLine(ex.Message);//打印错误信息
                return false;
            }
            return true;
        }

        //关闭数据库
        private bool Close()
        {

            if (m_sqlConnect.State == ConnectionState.Closed)
            {
                Console.WriteLine("没有正在链接的数据库");//打印信息
                return false;
            }

            try
            {
                m_sqlConnect.Close();
                Console.WriteLine("数据库关闭成功");//打印信息
                return true;
            }
            catch (MySqlException ex)
            {
                Console.WriteLine(ex.Message);//打印错误信息
            }
            return false;
        }

        //因为读写不太一样,所以分开来写
        //读取数据,参数为sql操作语句
        public MySqlDataReader DBRead(string sqlStr)
        {
            //从 MySQL 数据库中读取查询结果的类
            MySqlDataReader reader = null;
            try
            {
                if (m_sqlConnect.State != ConnectionState.Open)
                {
                    Console.WriteLine("数据库未链接");
                    //尝试重新链接
                    Connect();
                }

                MySqlCommand command = new MySqlCommand(sqlStr, m_sqlConnect);
                reader = command.ExecuteReader();
            }
            catch (MySqlException ex)
            {
                Console.WriteLine(ex.Message);//打印错误信息
            }
            return reader;

            //-----------------------写在return之后,不单独去拉一个模块去写了-------------------------
            // MySqlDataReader reader的用法

            while (reader.Read())
            {

                //判断字段是否为null,为null数据转换会失败
                if (!reader.IsDBNull(1))
                {
                    // 输出第一列字段值
                    Console.WriteLine(reader.GetInt32(0));
                    // Console.WriteLine(reader.GetInt32("id"));
                }

            }
        }

        //更改数据库
        public int DBWrite(string sqlStr)
        {
            if (m_sqlConnect.State != ConnectionState.Open)
            {
                Console.WriteLine("数据库未链接");
                return -1;
            }

            try
            {
                MySqlCommand command = new MySqlCommand(sqlStr, m_sqlConnect);
                return command.ExecuteNonQuery();//如果不等于0则表示更改成功,返回的结果是所更改的数据数
            }
            catch (MySqlException ex)
            {
                Console.WriteLine(ex.Message);//打印错误信息
                return -1;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值