其实我也清楚,这并不是全能,这样写标题也就是只有等待拍砖的份了。不过话又说回来,对Excel的操作,方法多得很,有的还真不敢用,现在这个是在我的项目中使用着的,今天等放假(下班就开始放年假),总结总结。
我说的全能非所谓的全能也,只是我自己的功能已满足罢了。
话题未放正,正经一点。
有时候,Excel操作会成为我们程序员的痛处。
COM的方式处理?杀进程?需要安装Office?
No,nononono!这些都不想了。
我只要OleDb就够用了。
读取内容产生DataSet? 没问题!
创建Excel文件? 没问题!
在Excel文件中创建Sheet? 没问题!
我要取出Excel文件中的所有表名? 没问题!
我要以索引来操作Sheet,不是名字行不? 没问题!
导出的数据太多,要分开多个Sheet放,行不? 没问题!
我要再扩展,可不可以? 代码都给你了,你说呢?
代码总体功能如下:
调用的方式如下图:
测试数据如下图:
产生的文件:
分Sheet写入内容:
想下班了,直接给代码吧,有一些注释应该够了,就不再多说了。
记得记得开开心心过年!
1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4: using System.Data;
5: using System.Data.OleDb;
6: using System.IO;
7:
8: namespace Core.DarrenExcelHelper
9: {
10: /// <summary>
11: /// 描述:對Excel文件的創建表、讀取、寫入數據操作.
12: /// 程序員:谢堂文(Darren Xie)
13: /// 創建日期:
14: /// 版本:1.0
15: /// </summary>
16: public static class MyExcelUtls
17: {
18: #region 取文件的擴展名
19: /// <summary>
20: /// 取文件的擴展名
21: /// </summary>
22: /// <param name="FileName">文件名稱</param>
23: /// <returns>string</returns>
24: public static string GetExtFileTypeName(string FileName)
25: {
26: string sFile = FileName;// myFile.PostedFile.FileName;
27: sFile = sFile.Substring(sFile.LastIndexOf("\\") + 1);
28: sFile = sFile.Substring(sFile.LastIndexOf(".")).ToLower();
29: return sFile;
30: }
31: #endregion
32:
33: #region 檢查一個文件是不是2007版本的Excel文件
34: /// <summary>
35: /// 檢查一個文件是不是2007版本的Excel文件
36: /// </summary>
37: /// <param name="FileName">文件名稱</param>
38: /// <returns>bool</returns>
39: public static bool IsExcel2007(string FileName)
40: {
41: bool r;
42: switch (GetExtFileTypeName(FileName))
43: {
44: case ".xls":
45: r = false;
46: break;
47: case ".xlsx":
48: r = true;
49: break;
50: default:
51: throw new Exception("你要檢查" + FileName + "是2007版本的Excel文件還是之前版本的Excel文件,但是這個文件不是一個有效的Excel文件。");
52:
53: }
54: return r;
55: }
56:
57: #endregion
58:
59: #region Excel的連接串
60: //Excel的連接串
61: //2007和之前的版本是有區別的,但是新的可以讀取舊的
62:
63: /// <summary>
64: /// Excel文件在服務器上的OLE連接字符串
65: /// </summary>
66: /// <param name="excelFile">Excel文件在服務器上的路徑</param>
67: /// <param name="no_HDR">第一行不是標題:true;第一行是標題:false;</param>
68: /// <returns>String</returns>
69: public static String GetExcelConnectionString(string excelFile, bool no_HDR)
70: {
71:
72: try
73: {
74: if (no_HDR)
75: {
76: if (IsExcel2007(excelFile))
77: {
78: return "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'"; //此连接可以操作.xls与.xlsx文件
79: }
80: else
81: {
82: return "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'"; //此连接只能操作Excel2007之前(.xls)文件
83:
84: }
85: }
86: else
87: {
88: return GetExcelConnectionString(excelFile);
89: }
90: }
91: catch (Exception ee)
92: {
93: throw new Exception(ee.Message);
94: }
95: }
96: /// <summary>
97: /// Excel文件在服務器上的OLE連接字符串
98: /// </summary>
99: /// <param name="excelFile">Excel文件在服務器上的路徑</param>
100: /// <returns>String</returns>
101: public static String GetExcelConnectionString(string excelFile)
102: {
103: try
104: {
105: if (IsExcel2007(excelFile))
106: {
107: return "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0; IMEX=1'"; //此连接可以操作.xls与.xlsx文件
108: }
109: else
110: {
111: return "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0; IMEX=1'"; //此连接只能操作Excel2007之前(.xls)文件
112:
113: }
114: }
115: catch (Exception ee)
116: {
117: throw new Exception(ee.Message);
118: }
119: }
120: /// <summary>
121: /// Excel文件在服務器上的OLE連接字符串
122: /// </summary>
123: /// <param name="excelFile">Excel文件在服務器上的路徑</param>
124: /// <returns>String</returns>
125: public static String GetExcelConnectionStringByWrite(string excelFile)
126: {
127: try
128: {
129: if (IsExcel2007(excelFile))
130: {
131: return "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + excelFile + ";Extended Properties='Excel 12.0;'"; //此连接可以操作.xls与.xlsx文件
132: }
133: else
134: {
135: return "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + excelFile + ";Extended Properties='Excel 8.0;'"; //此连接只能操作Excel2007之前(.xls)文件
136:
137: }
138: }
139: catch (Exception ee)
140: {
141: throw new Exception(ee.Message);
142: }
143: }
144: #endregion
145:
146: #region 讀取Excel中的所有表名
147: //讀取Excel中的所有表名
148: //读取Excel文件时,可能一个文件中会有多个Sheet,因此获取Sheet的名称是非常有用的
149:
150: /// <summary>
151: /// 根据Excel物理路径获取Excel文件中所有表名,列名是TABLE_NAME
152: /// </summary>
153: /// <param name="excelFile">Excel物理路径</param>
154: /// <returns>DataTable</returns>
155: public static System.Data.DataTable GetExcelSheetNames2DataTable(string excelFile)
156: {
157: OleDbConnection objConn = null;
158: System.Data.DataTable dt = null;
159:
160: try
161: {
162: string strConn = GetExcelConnectionString(excelFile);
163: objConn = new OleDbConnection(strConn);
164: objConn.Open();
165: dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
166: if (dt == null)
167: {
168: return null;
169: }
170: return dt;
171: }
172: catch (Exception ee)
173: {
174: throw new Exception(ee.Message);
175: }
176: finally
177: {
178: if (objConn != null)
179: {
180: objConn.Close();
181: objConn.Dispose();
182: }
183: if (dt != null)
184: {
185: dt.Dispose();
186: }
187: }
188: }
189:
190: /// <summary>
191: /// 根据Excel物理路径获取Excel文件中所有表名
192: /// </summary>
193: /// <param name="excelFile">Excel物理路径</param>
194: /// <returns>String[]</returns>
195: public static String[] GetExcelSheetNames(string excelFile)
196: {
197: System.Data.DataTable dt = null;
198:
199: try
200: {
201:
202: dt = GetExcelSheetNames2DataTable(excelFile);
203: if (dt == null)
204: {
205: return null;
206: }
207: String[] excelSheets = new String[dt.Rows.Count];
208: int i = 0;
209: foreach (DataRow row in dt.Rows)
210: {
211: excelSheets[i] = row["TABLE_NAME"].ToString();
212: i++;
213: }
214:
215: return excelSheets;
216: }
217: catch (Exception ee)
218: {
219: throw new Exception(ee.Message);
220: }
221: finally
222: {
223: if (dt != null)
224: {
225: dt.Dispose();
226: }
227: }
228: }
229: /// <summary>
230: /// 根据Excel物理路径获取Excel文件中所有表名
231: /// </summary>
232: /// <param name="excelFile">Excel物理路径</param>
233: /// <returns>String[]</returns>
234: public static List<string> GetExcelSheetNames2List(string excelFile)
235: {
236: List<string> l = new List<string>();
237: try
238: {
239: if (File.Exists(excelFile))//如果文件不存在,就不用檢查了,一定是0個表的
240: {
241: string[] t = GetExcelSheetNames(excelFile);
242: foreach (string s in t)
243: {
244: string ss = s;
245: if (ss.LastIndexOf('$') > 0)
246: {
247: ss = ss.Substring(0, ss.Length - 1);
248: }
249: l.Add(ss);
250: }
251: }
252: return l;
253: }
254: catch (Exception ee)
255: {
256: throw ee;
257: }
258:
259: }
260: #endregion
261:
262: #region Sheet2DataTable
263: /// <summary>
264: /// 獲取Excel文件中指定SheetName的內容到DataTable
265: /// </summary>
266: /// <param name="FileFullPath">Excel物理路径</param>
267: /// <param name="SheetName">SheetName</param>
268: /// <param name="no_HDR">第一行不是標題:true;第一行是標題:false;</param>
269: /// <returns>DataTable</returns>
270: public static DataTable GetExcelToDataTableBySheet(string FileFullPath, string SheetName, bool no_HDR)
271: {
272: try
273: {
274: return GetExcelToDataSet(FileFullPath, no_HDR, SheetName).Tables[SheetName];
275: }
276: catch (Exception ee)
277: {
278: throw new Exception(ee.Message);
279: }
280: }
281: /// <summary>
282: /// 獲取Excel文件中指定SheetName的內容到DataTable
283: /// </summary>
284: /// <param name="FileFullPath">Excel物理路径</param>
285: /// <param name="SheetName">SheetName</param>
286: /// <returns>DataTable</returns>
287: public static DataTable GetExcelToDataTableBySheet(string FileFullPath, string SheetName)
288: {
289: try
290: {
291: return GetExcelToDataTableBySheet(FileFullPath, SheetName, false);
292: }
293: catch (Exception ee)
294: {
295: throw new Exception(ee.Message);
296: }
297: }
298: #endregion
299:
300: #region Excel2DataSet
301: /// <summary>
302: /// 獲取Excel文件中所有Sheet的內容到DataSet,以Sheet名做DataTable名
303: /// </summary>
304: /// <param name="FileFullPath">Excel物理路径</param>
305: /// <param name="no_HDR">第一行不是標題:true;第一行是標題:false;</param>
306: /// <returns>DataSet</returns>
307: public static DataSet GetExcelToDataSet(string FileFullPath, bool no_HDR)
308: {
309: try
310: {
311: string strConn = GetExcelConnectionString(FileFullPath, no_HDR);
312: OleDbConnection conn = new OleDbConnection(strConn);
313: conn.Open();
314: DataSet ds = new DataSet();
315: foreach (string colName in GetExcelSheetNames(FileFullPath))
316: {
317: OleDbDataAdapter odda = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", colName), conn); //("select * from [Sheet1$]", conn);
318: odda.Fill(ds, colName);
319: }
320: conn.Close();
321: return ds;
322: }
323: catch (Exception ee)
324: {
325: throw new Exception(ee.Message);
326: }
327: }
328: /// <summary>
329: /// 獲取Excel文件中指定Sheet的內容到DataSet,以Sheet名做DataTable名
330: /// </summary>
331: /// <param name="FileFullPath">Excel物理路径</param>
332: /// <param name="no_HDR">第一行不是標題:true;第一行是標題:false;</param>
333: /// <param name="SheetName">第一行不是標題:true;第一行是標題:false;</param>
334: /// <returns>DataSet</returns>
335: public static DataSet GetExcelToDataSet(string FileFullPath, bool no_HDR, string SheetName)
336: {
337: try
338: {
339: string strConn = GetExcelConnectionString(FileFullPath, no_HDR);
340: OleDbConnection conn = new OleDbConnection(strConn);
341: conn.Open();
342: DataSet ds = new DataSet();
343: OleDbDataAdapter odda = new OleDbDataAdapter(string.Format("SELECT * FROM [{0}]", SheetName), conn); //("select * from [Sheet1$]", conn);
344: odda.Fill(ds, SheetName);
345: conn.Close();
346: return ds;
347: }
348: catch (Exception ee)
349: {
350: throw new Exception(ee.Message);
351: }
352: }
353: #endregion
354:
355: #region 刪除過時文件
356: //刪除過時文件
357: public static bool DeleteOldFile(string servepath)
358: {
359: try
360: {
361: FileInfo F = new FileInfo(servepath);
362: F.Delete();
363: return true;
364: }
365: catch (Exception ee)
366: {
367: throw new Exception(ee.Message + "刪除" + servepath + "出錯.");
368: }
369: }
370: #endregion
371:
372: #region 在Excel文件中創建表,Excel物理路径如果文件不是一個已存在的文件,會自動創建文件
373: /// <summary>
374: /// 在一個Excel文件中創建Sheet
375: /// </summary>
376: /// <param name="servepath">Excel物理路径,如果文件不是一個已存在的文件,會自動創建文件</param>
377: /// <param name="sheetName">Sheet Name</param>
378: /// <param name="cols">表頭列表</param>
379: /// <returns>bool</returns>
380: public static bool CreateSheet(string servepath,string sheetName,string[] cols)
381: {
382: try
383: {
384: if (sheetName.Trim() == "")
385: {
386: throw new Exception( "需要提供表名。");
387: }
388: //if (!File.Exists(servepath))
389: //{
390: // throw new Exception(servepath+"不是一個有效的文件路徑。");
391: //}
392: if(cols.Equals(null))
393: {
394: throw new Exception("創建表需要提供字段列表。");
395: }
396: using (OleDbConnection conn = new OleDbConnection(GetExcelConnectionStringByWrite(servepath)))
397: {
398: conn.Open();
399: OleDbCommand cmd = new OleDbCommand();
400: cmd.Connection = conn;
401: if (sheetName.LastIndexOf('$') > 0)
402: {
403: sheetName = sheetName.Substring(sheetName.Length-1);
404: }
405: cmd.CommandType = CommandType.Text;
406: cmd.CommandTimeout = 3600;
407: StringBuilder sql = new StringBuilder();
408: sql.Append("CREATE TABLE [" + sheetName + "](");
409: foreach (string s in cols)
410: {
411: sql.Append("[" + s + "] text,");
412: }
413: sql = sql.Remove(sql.Length - 1, 1);
414: sql.Append(")");
415: cmd.CommandText = sql.ToString();
416: cmd.ExecuteNonQuery();
417: return true;
418: }
419: }
420: catch(Exception ee)
421: {
422: throw ee;
423: }
424: }
425: #endregion
426:
427: #region DataTable2Sheet,把一個DataTable寫入Excel中的表,Excel物理路径,如果文件不是一個已存在的文件,會自動創建文件
428: /// <summary>
429: /// 把一個DataTable寫入到一個或多個Sheet中
430: /// </summary>
431: /// <param name="servepath">Excel物理路径,如果文件不是一個已存在的文件,會自動創建文件</param>
432: /// <param name="dt">DataTable</param>
433: /// <returns>bool</returns>
434: public static bool DataTable2Sheet(string servepath, DataTable dt)
435: {
436: try
437: {
438: return DataTable2Sheet(servepath, dt, dt.TableName);
439: }
440: catch (Exception ee)
441: {
442: throw ee;
443: }
444: }
445: /// <summary>
446: /// 把一個DataTable寫入到一個或多個Sheet中
447: /// </summary>
448: /// <param name="servepath">Excel物理路径,如果文件不是一個已存在的文件,會自動創建文件</param>
449: /// <param name="dt">DataTable</param>
450: /// <param name="maxrow">一個Sheet的行數</param>
451: /// <returns>bool</returns>
452: public static bool DataTable2Sheet(string servepath, DataTable dt,int maxrow)
453: {
454: try
455: {
456: return DataTable2Sheet(servepath, dt, dt.TableName, maxrow);
457: }
458: catch (Exception ee)
459: {
460: throw ee;
461: }
462: }
463: /// <summary>
464: /// 把一個DataTable寫入到一個或多個Sheet中
465: /// </summary>
466: /// <param name="servepath">Excel物理路径,如果文件不是一個已存在的文件,會自動創建文件</param>
467: /// <param name="dt">DataTable</param>
468: /// <param name="sheetName">Sheet Name</param>
469: /// <returns>bool</returns>
470: public static bool DataTable2Sheet(string servepath, DataTable dt, string sheetName)
471: {
472: try
473: {
474: return DataTable2Sheet(servepath, dt, dt.TableName,0);
475: }
476: catch (Exception ee)
477: {
478: throw ee;
479: }
480: }
481: /// <summary>
482: /// 把一個DataTable寫入到一個或多個Sheet中
483: /// </summary>
484: /// <param name="servepath">Excel物理路径,如果文件不是一個已存在的文件,會自動創建文件</param>
485: /// <param name="dt">DataTable</param>
486: /// <param name="sheetName">Sheet Name</param>
487: /// <param name="maxrow">一個Sheet的行數</param>
488: /// <returns>bool</returns>
489: public static bool DataTable2Sheet(string servepath,DataTable dt,string sheetName,int maxrow)
490: {
491: try
492: {
493: if (sheetName.Trim() == "")
494: {
495: throw new Exception("需要提供表名。");
496: }
497: StringBuilder strSQL = new StringBuilder();
498: //看看目標表是否已存在
499: List<string> tables = GetExcelSheetNames2List(servepath);
500: if (tables.Contains(sheetName))
501: {
502: //存在,直接寫入
503: using (OleDbConnection conn = new OleDbConnection(GetExcelConnectionStringByWrite(servepath)))
504: {
505: conn.Open();
506: OleDbCommand cmd = new OleDbCommand();
507: cmd.Connection = conn;
508: for (int i = 0; i < dt.Rows.Count; i++)
509: {
510: StringBuilder strfield = new StringBuilder();
511: StringBuilder strvalue = new StringBuilder();
512: for (int j = 0; j < dt.Columns.Count; j++)
513: {
514: strfield.Append("[" + dt.Columns[j].ColumnName + "]");
515: strvalue.Append("'" + dt.Rows[i][j].ToString() + "'");
516: if (j != dt.Columns.Count - 1)
517: {
518: strfield.Append(",");
519: strvalue.Append(",");
520: }
521: }
522: if (maxrow == 0)//不需要限制一個表的行數
523: {
524: cmd.CommandText = strSQL.Append(" insert into [" + sheetName + "]( ")
525: .Append(strfield.ToString()).Append(") values (").Append(strvalue).Append(")").ToString() ;
526: }
527: else
528: {
529: //加1才可才防止i=0的情況只寫入一行
530: string sheetNameT=sheetName + ((i+1) / maxrow + (Math.IEEERemainder(i+1, maxrow) == 0 ? 0 : 1)).ToString();
531: if (!tables.Contains(sheetNameT))
532: {
533: tables = GetExcelSheetNames2List(servepath);
534: string[] cols = new string[dt.Columns.Count];
535: for (int ii = 0; ii < dt.Columns.Count; ii++)
536: {
537: cols[ii] = dt.Columns[ii].ColumnName;
538: }
539: if (!(CreateSheet(servepath, sheetNameT, cols)))
540: {
541: throw new Exception("在" + servepath + "上創建表" + sheetName + "失敗.");
542: }
543: else
544: {
545: tables = GetExcelSheetNames2List(servepath);
546: }
547: }
548: cmd.CommandText = strSQL.Append(" insert into [" + sheetNameT + "]( ")
549: .Append(strfield.ToString()).Append(") values (").Append(strvalue).Append(")").ToString() ;
550:
551: }
552: cmd.ExecuteNonQuery();
553: strSQL.Remove(0, strSQL.Length);
554: }
555:
556:
557:
558: conn.Close();
559: }
560: }
561: else
562: {
563: //不存在,需要先創建
564: using (OleDbConnection conn = new OleDbConnection(GetExcelConnectionStringByWrite(servepath)))
565: {
566: conn.Open();
567: OleDbCommand cmd = new OleDbCommand();
568: cmd.Connection = conn;
569: //創建表
570: string[] cols = new string[dt.Columns.Count];
571: for (int i = 0; i < dt.Columns.Count; i++)
572: {
573: cols[i] = dt.Columns[i].ColumnName;
574: }
575:
576: //產生寫數據的語句
577: for (int i = 0; i < dt.Rows.Count; i++)
578: {
579: StringBuilder strfield = new StringBuilder();
580: StringBuilder strvalue = new StringBuilder();
581: for (int j = 0; j < dt.Columns.Count; j++)
582: {
583: strfield.Append("[" + dt.Columns[j].ColumnName + "]");
584: strvalue.Append("'" + dt.Rows[i][j].ToString() + "'");
585: if (j != dt.Columns.Count - 1)
586: {
587: strfield.Append(",");
588: strvalue.Append(",");
589: }
590: }
591: if (maxrow == 0)//不需要限制一個表的行數
592: {
593: if (!tables.Contains(sheetName))
594: {
595: if (!(CreateSheet(servepath, sheetName, cols)))
596: {
597: throw new Exception("在" + servepath + "上創建表" + sheetName + "失敗.");
598: }
599: else
600: {
601: tables = GetExcelSheetNames2List(servepath);
602: }
603: }
604: cmd.CommandText = strSQL.Append(" insert into [" + sheetName + "]( ")
605: .Append(strfield.ToString()).Append(") values (").Append(strvalue).Append(")").ToString() ;
606: }
607: else
608: {
609: //加1才可才防止i=0的情況只寫入一行
610: string sheetNameT=sheetName + ((i+1) / maxrow + (Math.IEEERemainder(i+1, maxrow) == 0 ? 0 : 1)).ToString();
611:
612: if (!tables.Contains(sheetNameT))
613: {
614: for (int ii = 0; ii < dt.Columns.Count; ii++)
615: {
616: cols[ii] = dt.Columns[ii].ColumnName;
617: }
618: if (!(CreateSheet(servepath, sheetNameT, cols)))
619: {
620: throw new Exception("在" + servepath + "上創建表" + sheetName + "失敗.");
621: }
622: else
623: {
624: tables = GetExcelSheetNames2List(servepath);
625: }
626: }
627: cmd.CommandText = strSQL.Append(" insert into [" + sheetNameT + "]( ")
628: .Append(strfield.ToString()).Append(") values (").Append(strvalue).Append(")").ToString();
629:
630: //
631: }
632: cmd.ExecuteNonQuery();
633: strSQL.Remove(0,strSQL.Length);
634: }
635: conn.Close();
636: }
637: }
638: return true;
639: }
640: catch (Exception ee)
641: {
642: throw ee;
643: }
644: }
645: #endregion
646: }
647: }
一、 注释规范
1、 修改代码时,总是使代码的注释保持最新, 为了防止问题反复出现,对错误修复和解决方法代码必须使用注释。
2、 在每个函数、方法的开始,应该提供标准的注释以指示例程的用途,注释样本应该是解释它为什么存在和可以做什么的简短介绍。
3、 避免在代码行的末尾添加注释;行尾注释使代码更难阅读。
4、 在变量声明时,应在行尾添加注释;在这种情况下,将所有行尾注释应使用公共制表符(Tab)在一处对齐。
5、 避免杂乱的注释,如一整行星号。而是应该使用空白将注释同代码分开。
6、 在编写注释时使用通俗易懂的句子。注释应该阐明代码,而不应该增加多义性。
7、 对由循环和逻辑分支组成的代码使用注释。这些可以帮助源代码读者理解代码书写目的。
8、 在所有的代码修改处加上修改标识的注释,创建标识和修改标识由创建或修改人员的姓名加日期组成,如:磊20081216
9、 为了是层次清晰,在闭合的右花括号后注释该闭合所对应的起点。
10、在部署发布之前,移除所有临时或无关的注释,以避免在日后的维护工作中产生混乱。
二、 javascript脚本注释
1、 创建注释
/*
创建标识:汤晓磊磊20081216
方法功能描述:按行政区划编码,查询出符合条件的人员编码
使用的表:
使用的视图:
使用的存储过程:
参数描述:CantonCode:行政区划编码
*/
Function GetPeopleByCantonCode(CantonCode)
{
…
}// 函数 GetPeopleByCantonCode 结束
2、 修改注释
/*
修改标识:磊20081216
修改内容:在查询语句中加入行政区划编码的限制条件
修改后测试人员确认标识:赵亮(小)20070416
*/
三、 C#文档注释
1、 创建注释
/// <summary>
/// 创建注释
/// 创建标识:磊20081216
/// 方法描述:按照行政区划编码,查询出符合条件的人员编码
/// 使用的表:
/// 使用的视图:
/// 使用的存储过程:
/// </summary>
/// <param name=" CantonCode ">行政区划编码</param>
/// <returns> Str ,查询的结果值</returns>
private string GetPeopleByCantonCode (string CantonCode)
{
…
Retutn Str;
} // 方法 GetPeopleByCantonCode结束
2、 修改注释
/// <summary>
/// 创建注释
/// 创建标识:磊20081216
/// 方法描述:按照行政区划编码,查询出符合条件的人员编码
/// 使用的表:
/// 使用的视图:
/// 使用的存储过程:
/// 修改注释
/// 修改标识:磊20081216
/// 修改内容:在查询语句中加入行政区划编码的限制条件
/// 修改后测试人员确认标识:赵亮(小)20070416
/// </summary>
/// <param name=" CantonCode ">行政区划编码</param>
/// <returns> Str ,查询的结果值</returns>
private string GetPeopleByCantonCode (string CantonCode)
{
…
Retutn Str;
} // 方法 GetPeopleByCantonCode结束
四、 SQL注释
1、 创建注释
/*
功能描述:
参数描述:
作者:
创建日期:
完成日期:
*/
2、 修改注释
/*
修改目的:
修改内容描述:
修改人:
修改日期:
完成日期:
*/
2011年即将结束,2012正在靠近。你是否在专业领域给自己设定2012的目标?不管你的答案如何,我相信下面列出的11条建议里面总有一两条适合你 :)
1. 使用Twitter - 如果你是一名程序员,如果你还没有使用Twitter,你就out了。不是说你有多少粉丝,而是在Twitter上你可以更快的得到问题的答案,获取你关注的话题的最新资讯。 (作者没有考虑到天朝的程序员们)
2. 经常阅读 StatckOverflow - StackOverflow是提问编程问题最好的地方。即使你没有账号,它也值得你去浏览,学习。(良好的英文阅读能力是程序员的必要素质,哈哈!)
3. 开始写博客 - 我认为每一位开发者都应该写博客!因为博客可以记录我们学习进步的轨迹,可以让别的开发者参考。写博客让你和别人更多的交流。还有,写博客可以提高你的技术社区的知名度。(OSChina的博客正在酝酿改版,等改完了欢迎给位来开博!)
4. 参加线下活动 - 从你的“shell”里面走出来吧,多参加线下的沙龙、活动、会议。和别的开发者交流可以让你在这个领域建立自己的人脉网络,这对你在这个领域的成长很有好处!(欢迎各位来参加OSChina线下活动~)
5. 使用现代化的智能手机 - 作为一名开发者如果你还在使用老土的山寨机,你得赶紧升级了。我还记得有一次跟一个经理聊天的时候,他得走回作为才能给我发邮件,我就在想“这哥哥是做IT的吗?”。正如有些行业你必须开好车,穿亮丽的衣服一样,我们干IT的就应该站在技术、硬件的前列!
6. 拥抱移动互联网 - 移动互联网的大潮才刚刚开始。你不仅需要知道如何为iPhone, WP7, Android开发应用,你也需要学习如何创建可以在任何一台移动设备上运行的网页程序。
7. 学习至少一种设计模式 - 我无法告诉你应该学习哪个设计模式,但是你至少得学习一种。我个人倾向于MVVM,因为我是Sliverlight/WPF/WP7开发者。
8. 每年设定可行的目标 - 创建一个简短的列表,记录你下一年想要完成的目标。同时你也应该按照季度来检查目标的完成情况。你可以用Gmail Reminder来提醒你自己~
9. 学习不同的编程语言 - 简单来说,学习新的语言可以拓宽你的视野,可以让你对计算机和编程语言是如何工作的有更深的了解。“如果你只有锤子,那么所有的问题在你看来都只是钉子”。
10. 增强自信 - 很少有程序员对自己很自信。如果你觉得你哪里弱,那你就去增强那里。互联网上有大量免费的资源可以让你学习各种只是,弥补你的弱项。
11. 阅读博客,技术书籍、杂志 - 你读过几本编程书籍?杂志呢?我相信一名好的程序员每年至少阅读5本编程书籍。不读书怎么进步呢?
摘要: 其实我也清楚,这并不是全能,这样写标题也就是只有等待拍砖的份了。不过话又说回来,对Excel的操作,方法多得很,有的还真不敢用,现在这个是在我的项目中使用着的,今天等放假(下班就开始放年假),总结总结。 我说的全能非所谓的全能也,只是我自己的功能已满足罢了。 话题未放正,正经一点。 有时候,Excel操作会成为我们程序员的痛处。 COM的方式处理?杀进程?需要安装Office? No,n... 阅读全文摘要: 一、 注释规范 1、 修改代码时,总是使代码的注释保持最新, 为了防止问题反复出现,对错误修复和解决方法代码必须使用注释。 2、 在每个函数、方法的开始,应该提供标准的注释以指示例程的用途,注释样本应该是解释它为什么存在和可以做什么的简短介绍。 3、 避免在代码行的末尾添加注释;行尾注释使代码更难阅读。 4、 在变量声明时,应在行尾添加注释;在这种情况下,将所有行尾注释应... 阅读全文摘要: 2011年即将结束,2012正在靠近。你是否在专业领域给自己设定2012的目标?不管你的答案如何,我相信下面列出的11条建议里面总有一两条适合你 :) 1. 使用Twitter - 如果你是一名程序员,如果你还没有使用Twitter,你就out了。不是说你有多少粉丝,而是在Twitter上你可以更快的得到问题的答案,获取你关注的话题的最新资讯。 (作者没有考虑到天朝的程序员们) 2. 经常... 阅读全文摘要: 功能說明:通過組名稱(AD組),取出用戶列表和用戶信息,如賬號、用戶名稱、說明、部門、職位、郵箱、OU等等AD賬號中已維護的信息。用EXT做的界面,可以導入多種格式的文件,當然用戶只是要Exsl格式就好。先上效果圖:1. 手工指定多個組名2. 從列出的組名中選取、導出文件需求背景:之前开放的一个公共盘,一有职员需要,就申请开通权限,时间长了,人员的进进出出换了好多。有的部门管理人员也换了。出于一些原因,某天经理和yao的邮件经理:please send the user access right for K drive to me 。yao:是每一个用户的话,只好手工一个一个用户名列出,给一些 阅读全文摘要: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Core { public static class FilePathTools { /// <summary>... 阅读全文摘要: 一、路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容; 二、相关通用文件对话框,这些对话框可以帮助我们操作文件系统中的文件和目录; 三、文件、目录、驱动器的操作,如获取它们的基本信息,获取和设置文件和目录的属性,文件的版本信息, 搜索文件和目录,文件判等,复制、移动、删除、重命名文件和目录; 四... 阅读全文摘要: 1、ADOX 概述 Microsoft ActiveX Data Objects Extensions for Data Definition Language and Security (ADOX) 是对 ADO 对象和编程模型的扩展。它可用于创建、修改和删除模式对象。它还包括安全对象,可用于维护用户和组,以及授予和撤消对象的权限。要通过开发工具使用 ADOX,需要建立对 ADOX 类型库... 阅读全文