由於上次發表了生成chm幫助文件,各位朋友都要求要源碼,很多朋友我用郵箱發了,但很多朋友來不及發了(主要是我不知道咋在博客園中上傳文件,而且最近好忙啊,真是。。。。。。),而且之前那個軟件開發環境版本很低,所以我決定用vs2010重新開發一遍,其中后台主要用linq to sql (剛學的,用起來不是很順,感覺有點小問題),不過基本上就是把原來用ADO.NET的地方用linq 語句改下了一下,大體功能沒變。希望能給大家有點幫助。點擊這里下載(文件名——WindowsFormsApplication2)
當然這個小項目也有瑕疵,比如
//string sql1 = "SELECT dcId,dcName,dcType,dcLength,CASE WHEN dcIsNull=1 THEN '√' ELSE '×'END AS dcIsNull,CASE WHEN dcDefault=0 THEN NULL ELSE dcDefault END AS dcDefault,dcRemark,ddcId FROM DocumentChilds WHERE ddcId='" + e.Node.Tag + "' ORDER BY dcName"; //dts = DBHelper.getDatatable(sql1); var v4 = from dc in cx.DocumentChilds where dc.ddcId == Convert.ToInt32(e.Node.Tag) select new { dc.dcId, dc.dcName, dc.dcType, dc.dcLength, dc.dcIsNull, dc.dcDefault, dc.dcRemark, dc.ddcId }; dts = v4.ToDataTable(cx);
被注釋sql用到了CASE WHEN dcIsNull=1 THEN '√' ELSE '×'END AS dcIsNull,用linq to sql 我還真是不知道該咋寫呢(如果過有知道的朋友,求給留言指教)
而且之力用到的 dts = v4.ToDataTable(cx);,中的ToDataTabel()方法不是系統自帶的方法,linq 默認可以轉換成對象,集合,數組,但就是沒有數據集,這一點剛開始讓我很是糾結,不過還好在網上找到了一個這樣的方法,如下
/// <summary> /// 對 System.Data.Linq 的擴展 /// 從給定的Linq To SQL 查詢獲取 DataTable 對象 /// </summary> /// <param name="source"></param> /// <param name="db"></param> /// <returns></returns> public static DataTable ToDataTable(this IQueryable source, DataClasses1DataContext db) { //將 LinqToSQL查詢傳遞給 GetCommand()以獲取DbCommand對象 DbCommand cmd = db.GetCommand(source); //打開數據庫鏈接,這里可以進一步擴展,比如傳遞進來自己定義的繼承自 DbConnection 的對象 if (db.Connection.State == ConnectionState.Closed) db.Connection.Open(); //聲明 DataTable 對象 DataTable dt = new DataTable(); //調用DataTable 對象的 Load方法 ,從 DbDataReader 對象加載數據。 dt.Load(cmd.ExecuteReader()); //關閉DbConnection 鏈接 db.Connection.Close(); return dt; }
這個寫在公共的靜態類里,只要你返回的linq 語句沒語法錯誤(如果有語法錯誤就.不出來了,呵呵,可以檢驗你是否語法錯誤,真是高級 啊),都可以todatatable轉換成數據集,也是很方便 ,(愛死數據集操作了,方便),問題有很多,慢慢改進中,我這邊先迫不及待的要發一份了,好像也有朋友急着要代碼,這次搞定它