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 |
是否用連接池 |