說明的說明:
博客園團隊兩次移此文出首頁,說
這篇文章不屬於知識分享型文章,並且有廣告嫌疑。本文的確屬於分享型文章,而且分享的知識點比其它文章都多很多,看看網友回復“謝謝分享”就知道是分享型文章了。
所謂廣告嫌疑,這東西一被扣上,就很難說的清。
本框架從2007年就始發布在博客園,一直更新維護到現在,其中是有過渡到最新版本是收費,但是仍保留開放很多版本的開源的。
但目前發布的,都是開源的免費版本,再說,涉及到收費就是廣告?ext也有收費版本,出現ext相關文章你咋不說是廣告?
win8,wp8你用的windows都是收費的,相關的文章你是不是也要說廣告?
話也不我說,這么久沒寫文章,露臉少了,欺負我新人是不? 你再欺負我,欺負我,我。。。。只好沉默了。
前言:
好久沒寫文章了,最近習慣了寫微博,發微博,都是140字以內+張圖片,偶爾發一發,也偶爾在閃存里閃一閃。
以前天天寫博客時,閉上眼也能寫的很長很長,這人長久不寫博客時,一拖再拖也只能迸出那么點字,悲劇的習慣!
在開源的這條路上,走過了很久很久,有一些想法,也麻木到沒有想法。
每當上園子來,看到開源的相關文章,我都會盡力的頂上一頂,但是總會發現下面的評論,是負面聲音一片,除了留下郵箱才能發源碼的那種。
之后的一段時間,很少再看到博主會堅持的不怕罵聲的繼續發布或更新開源文章,少但不排除沒有。
目前就這種現狀,各位開源流的博主,還是要頂住罵聲往前走!大帝保佑你們!
正文:
本次開源 CYQ.Data 數據框架 V4.0 開源版本,具體下載地址:http://www.cyqdata.com/download/article-detail-426
本人對研究本框架的人士持續提供技術支持,技術指導。
學習本框架,至少您能學到如何真正做到多對數據庫的支持,和各種數據庫的差異性語法(那些說支持多數據庫,只有接口卻等你去實現的都是浮雲,因為實現過才知道,差異性的兼容才是最麻煩的,框架的開發者把最麻煩的事留給你,卻對你說支持多種數據庫,這是多悲劇的事,有能力實現差異性兼容,估計你也有能力寫出自己的框架了)。
這也將成為您往后編寫自己的框架的資本,研究並掌握底層的框架有助於你成長為高級人士,獲得更豐富的待遇。
園子里已經有很多同學參考並學習了源碼,編寫出屬於自己個性的框架,您還等待什么?
框架截圖:
具體的更新記錄,在源碼里就有了,這里就不重復的又貼一大堆文字出來了。
這里貼一段開源的代碼中的Json操作類代碼,避免博客園工作人員誤操作:
{
/// <summary>
/// 是否成功
/// </summary>
public bool Success
{
get
{
return count > 0;
}
}
private string errorMsg = "";
/// <summary>
/// 錯誤提示信息
/// </summary>
public string ErrorMsg
{
get
{
return errorMsg;
}
set
{
errorMsg = value;
}
}
private int count = 0;
/// <summary>
/// 總記
/// </summary>
public int Count
{
get
{
return count;
}
set
{
count = value;
}
}
private List< string> arrData = new List< string>();
#region 對象與對象之間分割符
public void addItemOk()
{
arrData.Add( " <br> ");
}
#endregion
#region 在數組里添加key,value
public void addItem( string name, string value)
{
arrData.Add( " \" " + name + " \": " + " \" " + value + " \" ");
}
#endregion
#region 返回組裝好的json字符串
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append( " { ");
sb.Append( " \"count\":\" " + count + " \", ");
sb.Append( " \"error\":\" " + errorMsg + " \", ");
sb.Append( " \"success\":\" " + (Success ? " true " : "") + " \", ");
sb.Append( " \"data\":[ ");
int index = 0;
sb.Append( " { ");
if (arrData.Count <= 0)
{
sb.Append( " }] ");
}
else
{
foreach ( string val in arrData)
{
index++;
if (val != " <br> ")
{
sb.Append(val + " , ");
}
else
{
sb = sb.Replace( " , ", "", sb.Length - 1, 1);
sb.Append( " }, ");
if (index < arrData.Count)
{
sb.Append( " { ");
}
}
}
sb = sb.Replace( " , ", "", sb.Length - 1, 1);
sb.Append( " ] ");
}
sb.Append( " } ");
return sb.ToString();
}
#endregion
#region 為DataTable增加處理
public void Fill(MDataTable table)
{
if (table == null)
{
ErrorMsg = " 查詢對象為Null ";
return;
}
Count = table.Rows.Count;
for ( int i = 0; i < table.Rows.Count; i++)
{
for ( int j = 0; j < table.Columns.Count; j++)
{
addItem(table.Columns[j].ColumnName, Convert.ToString(table.Rows[i][j].Value));
}
addItemOk();
}
}
public MDataTable Load( string json)
{
MDataTable table = new MDataTable( " loadFromJson ");
if (! string.IsNullOrEmpty(json) && json.Length > 30 && json.StartsWith( " { ") && json.IndexOf( ' , ') > - 1 && json.EndsWith( " } "))
{
try
{
int start=json.IndexOf( " :[{ ") + 2;
string data = json.Substring(start, json.LastIndexOf( " ]} ") - start);
data = data.Replace( " \\} ", " #100# ").Replace( " \\, ", " #101# ").Replace( " \\:, ", " #102# ");
bool isOK= false;
if (! string.IsNullOrEmpty(data))
{
string[] items = data.Replace( " { ", string.Empty).Split( ' } '); // 分隔每一行
string item = string.Empty, key = string.Empty, value = string.Empty;
for ( int i = 0; i < items.Length; i++) // 循環每一行數據
{
item = items[i].Replace( " #100# ", " \\} ").Trim( ' , ');
if ( string.IsNullOrEmpty(item))
{
continue;
}
string[] keyValues = item.Split( ' , ');
string keyValue = string.Empty;
if (i == 0)
{
for ( int j = 0; j < keyValues.Length; j++)
{
keyValue = keyValues[j].Replace( " #101# ", " \\, ");
key = keyValue.Split( ' : ')[ 0].Trim( ' \' ', ' \" ');
table.Columns.Add(key, SqlDbType.NVarChar);
}
isOK= true;
}
if (isOK)
{
MDataRow row = table.NewRow();
for ( int k = 0; k < keyValues.Length; k++)
{
keyValue = keyValues[k].Replace( " #101# ", " \\, ");
if (keyValue.IndexOf( ' : ') > - 1)
{
value = keyValue.Substring(keyValue.IndexOf( ' : ')+ 1).Replace( " #102# ", " \\: ").Trim( ' \' ', ' \" ');
row[k].Value = value;
}
}
table.Rows.Add(row);
}
}
}
}
catch
{
return table;
}
}
return table;
}
#endregion
}
本版本為秋色園V2.0和V2.5對應的框架版本,為了促進國內ASP.NET開源博客更進一步和諧,近期將跳過2.0版本開源秋色園V2.5多用戶版本。
秋色園系列原理文章網上都很多了,想學習的同學就不要錯過了:http://www.cnblogs.com/cyq1162/archive/2010/12/14/1905776.html
這里也有51cto大賽的參賽頁面,感謝路過的朋友也順手扔一票:http://blog.51cto.com/contest2012/2127378