文章目录

前言一、准备工作二、C#使用Sql代码演示

前言

因为工作由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 端口,默认 3306ConnectionProtocol,protocol连接协议,默认 SocketsPipeName,pipe连接管道,默认 MYSQLUseCompression,compress连接是否压缩,默认 falseAllowBatch是否允许一次执行多条SQL语句,默认 trueLogging是否启用日志,默认 falseSharedMemoryName内存共享的名称,默认 MYSQLUseOldSyntax,old syntax, oldsyntax是否兼容旧版的语法,默认 falseConnectionTimeout,connection timeout连接超时等待时间,默认15sDefaultCommandTimeout,command timeoutMySqlCommand 超时时间,默认 30sUserID, uid, username, user name, user数据库登录帐号Password,pwd登录密码PersistSecurityInfo是否保持敏感信息,默认 falseEncryptEncryptCertificatePassword证书的密码CertificateStoreLocation证书的存储位置CertificateThumbprint证书指纹AllowZeroDateTime日期时间能否为零,默认 falseConvertZeroDateTime为零的日期时间是否转化为 DateTime.MinValue,默认 falseUseUsageAdvisor, usage advisor是否启用助手,会影响数据库性能,默认 falseProcedureCacheSize,procedure cache, procedurecache同一时间能缓存几条存储过程,0为禁止,默认 25UsePerformanceMonitor,userperfmon, perfmon是否启用性能监视,默认 falseIgnorePrepare是否忽略 Prepare() 调用,默认 trueUseProcedureBodies,procedure bodies是否检查存储过程体、参数的有效性,默认 trueAutoEnlist是否自动使用活动的连接,默认 trueRespectBinaryFlags是否响应列上元数据的二进制标志,默认 trueTreatTinyAsBoolean是否将 TINYINT(1) 列视为布尔型,默认 trueAllowUserVariables是否允许 SQL 中出现用户变量,默认 falseInteractiveSession,interactive会话是否允许交互,默认 falseFunctionsReturnString所有服务器函数是否按返回字符串处理,默认 falseUseAffectedRows是否用受影响的行数替代查找到的行数来返回数据,默认 falseOldGuids是否将 binary(16) 列作为 Guids,默认 falseKeepalive保持 TCP 连接的秒数,默认0,不保持。ConnectionLifeTime连接被销毁前在连接池中保持的最少时间(秒)。默认 0Pooling是否使用线程池,默认 trueMinimumPoolSize, min pool size线程池中允许的最少线程数,默认 0MaximumPoolSize,max pool size线程池中允许的最多线程数,默认 100ConnectionReset连接过期后是否自动复位,默认 falseCharacterSet, charset向服务器请求连接所使用的字符集,默认:无TreatBlobsAsUTF8binary blobs 是否按 utf8 对待,默认 falseBlobAsUTF8IncludePattern列的匹配模式,一旦匹配将按 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;

}

}

}

}

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。