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