MYSQL的几种连接方法
连接MySQL有下列几种方法:针对不同的语言和不同的驱动:
l Connector/ODBC
l Connector/Net
l Connector/J
l Connector/Python
l Connector/C++
l Connector/C
一个最简单的数据库连接示例:使用Connector/Net
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data;
using MySql.Data.MySqlClient;
namespace MySQLConnect
{
class Program
{
static void Main(string[] args)
{
MySqlConnection conn = new MySqlConnection();
conn.ConnectionString = "Database=sakila;Host=localhost;Port=55944;User Id=us_rgyu;Password=Tongyun@2013007;charset=utf8;pooling=true;";
conn.Open();
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT @@VERSION";
string versionInfo = cmd.ExecuteScalar().ToString();
Console.WriteLine("version=" + versionInfo);
}
}
}
连接的时候,最容易碰到下面两种错误:
- Error Number=0: Cannot connect to server
- Error Number=1045: Invalid user name and/or password
连接的时候,如果没有指定字符集,那么缺省会用Latin1字符集。
MySQL的命令缺省值缺省为30秒。
每隔三分钟,MySQL的客户端和服务器端会运行作业,对于Pool内三分钟之前Idle的连接进行移除。包括客户端的端口资源的释放,以及服务器端的端口资源和线程资源释放。
连接字符串选项:
选项 | 缺省值 | 描述 |
AllowBatch | 开 | 支持多个命令放在一起,用分号隔开。 |
AllowUserVariables | 关 | 在SQL语句中有变量 |
AllowZeroDateTime | 关 | 如开启,MySqlDataReader.GetValue()返回一个零值 |
AutoEnlist | 开 | 暂无多大用处 |
BlobAsUTF8ExcludePattern | NULL | 不包含UTF8 的BLOB列的regular expression |
BlobAsUTF8IncludePattern | NULL | 包含UTF8 的BLOB列的regular expression |
CertificateFile | NULL | 证书文件 |
CertificatePassword | NULL | 证书密码 |
CertificateStoreLocation | NULL | 证书位置 |
CertificateThumbprint | NULL | 证书手印 |
CharSet |
| 发送给服务器查询的字符集。(返回结果的字符集依旧沿用服务器) |
CheckParameters | TRUE | 存储过程的参数检查 |
CommandInterceptors |
| 解释器集合 |
ConnectionTimeout | 15 | 连接超时 |
Connect_Attrs |
| 传入连接属性,如版本号,program_name等 |
ConvertZeroDateTime | False | 当为真时,对于不允许的时间,会返回DateTime.MinValue |
DefaultCommandTimeout | 30 | 查询超时时间 |
DefaultTableCacheAge | 60 | 缓存时间 |
enableSessionExpireCallBack | False | 暂无多大用处 |
UseSSL | False | 使用SSL加密 |
ExceptionInterceptors |
| 错误解释器集合 |
FunctionsReturnString | False | 暂无多大用处 |
Host, Server, Data Source, Addr, Address, DataSource, Network Address | Localhost | 连接的服务器名 |
IgnorePrepare | True | 自动忽略MySqlCommand.Prepare() |
Includesecurityasserts | False | 暂无多大用处 |
Initial Catalog,database | Mysql | 要连接的数据库 |
Interactive | False | 如果是真的话,那么客户端则是interactive client,服务器上的wait_timeout则会起作用。 |
IntegratedSecurity | No | 集成验证 |
Keepalive | 0 | 第一个TCP keepalive包发送之前的等待时间。0表示不用keepalive,以秒为单位 |
Logging | False | 用于记录Trace信息 |
oldGUIDs | False | GUID是从BINARY(16)改为CHAR(36),如为真,沿用BINARY(16) |
useOldSyntax | False | 暂无多大用处 |
Password, pwd |
| 密码 |
PersistSecurityInfo | False | 是否要显示密码信息。 |
PipeName | Mysql | 使用Named Pipe进行连接 |
Port | 3306 | 连接数据库服务器的端口号 |
Procedurecache | 25 | 缺省情况下,.NET保存最近25个的存储过程的输入输出参数信息 |
Protocol | Socket | 连接的协议,选项有TCP(SOCKET), PIPE, UNIX, MEMORY |
Replication | False | 是否连接的是Replication服务器 |
RespectBinaryFlags | True | 尊重Column的binary flags |
SharedMemoryName | MYSQL | 对于protocol为memory时有效 |
Sqlservermode | False | 当为真时,课用[]来代替``, 对性能会有影响,不建议用 |
SSLMode | None | 暂无多大用处 |
Tablecaching | False | 暂无多大用处 |
TreatBlogsAsUTF8 | False | 暂无多大用处 |
TreatTinyAsBoolean | True | 否则的话,TINYINT(1)会被视为INT |
UseAffectedRows | False | 暂无多大用处 |
UseProcedureBodies | True | 存储过程是可读的,可帮助判定参数类型和顺序 |
User ID, UserID, UserName, Uid, User Name, User |
| 登录名 |
UseUsageAdvisor | False | 暂无多大用处 |
UsePerformanceMonitor | False | 要求在执行期间,性能计数器也相应更新 |
连接池相关的选项
选项 | 缺省值 | 描述 |
CachedServerProperties | False | SHOW VARIABLES 是否会更新。缺省是每次更新的。 |
ConnectionLifeTime | 0 | 如果超过指定时间,退回Pool里的连接是否要强制销毁,对A10环境比较有用。0值表示最大值。 |
ConnectionReset | False | 每次从Pool里获得连接后,对连接状态是否要重置。 |
MaximumPoolSize | 100 | Pool里的连接池大小 |
MinimumPoolSize | 0 | Pool里的最小连接个数 |
Pooling | True | 是否用连接池 |