今天嘗試了一下,在DNN的模式一下,部分模組採用mysql儲存資料,而主DNN依然運行在Sql Server下。
步驟如下:
1.在web.config增加串連:
<add
name="SiteMySqlServer"
connectionString="Server=192.168.69.159;Port=3306;Database=Demo;Uid=root;Pwd="
providerName="System.Data.SqlClient" />
*providerName -- 不用管。
主要是connectionString,目前很奇怪,無法在裡面加charset,一加後,mysql connector就報錯。
2. 引入mysql connector <詳細:http://dev.mysql.com/downloads/connector/net/6.0.html> ,最新版是6.0
3.在自己的dnn module中引入mysql.data,我們主要用的類是:MySqlHelper.
相關執行個體代碼如下,裡麵包含了直接使用sql語句,調用預存程序,是否帶參數等方式。如果需要使用事務,盡量使用預存程序模式,MySqlHelper好像無法直接支援事務操作。
Code
public override IDataReader GetUserList()
{
MySqlParameter param1 = new MySqlParameter();
param1.Value = "xxx";
param1.ParameterName = "name";
MySqlParameter param2 = new MySqlParameter();
param2.Value = 20;
param2.ParameterName = "age";
//return MySqlHelper.ExecuteReader(_connectionString, "select * from test where name=@name and age=@age " ,new MySqlParameter[]{param1,param2});
return MySqlHelper.ExecuteReader(_connectionString, "call test_sp_getuser (@name,@age) ", new MySqlParameter[] { param1, param2 });
}
4.實體類(PO),
一般情況,我們使用 CBO.FillCollection<UserInfo>(DataProvider.Instance().GetUserList()); 來填充資料,但是實際測試下情況下,這種方式不行。
為了支援這種方式,我們必須在UserInfo類中實現IHydratable介面,執行個體代碼如下:
Code
public class UserInfo : IHydratable
{
public int Id;
public string Name;
public int Age;
#region IHydratable 成員
public void Fill(System.Data.IDataReader dr)
{
Id = Convert.ToInt32(Null.SetNull(dr["Id"], Id));
Name = Convert.ToString(Null.SetNull(dr["name"], Name));
Age = Convert.ToInt32(Null.SetNull(dr["age"], Age));
}
public int KeyID
{
get
{
return Id;
}
set
{
Id = value;
}
}
#endregion
}
story is over....
enjoy yourself.