DataTable一些小應用

来源:互联网 发布:wifi大数据分析 编辑:程序博客网 时间:2024/06/06 02:36
 01/// <summary>
02/// 建立datatable
03/// </summary>
04/// <param name="ColumnName">欄位名用逗號分隔</param>
05/// <param name="value">data陣列 , rowmajor</param>
06/// <returns>DataTable</returns>
07public static DataTable CreateDataTable(stringColumnName, string[,] value)
08{
09    /*  輸入範例
10    string cname = " name , sex ";
11    string[,] aaz = new string[4, 2];
12    for (int q = 0; q < 4; q++)
13        for (int r = 0; r < 2; r++)
14            aaz[q, r] = "1";
15    dataGridView1.DataSource = NewMediaTest1.Model.Utility.DataSetUtil.CreateDataTable(cname, aaz);
16    */
17    inti,j;
18    DataTable ResultTable =new DataTable();
19    string[] sep =new string[] {"," };
20    string[] TempColName = ColumnName.Split(sep, StringSplitOptions.RemoveEmptyEntries);
21    DataColumn[] CName =new DataColumn[TempColName.Length];
22    for(i = 0; i < TempColName.Length; i++)
23    {
24        DataColumn c1 =new DataColumn(TempColName[i].ToString().Trim(),typeof(object));
25        ResultTable.Columns.Add(c1);
26    }
27    if(value != null)
28    {
29        for(i = 0; i < value.GetLength(0); i++)
30        {
31            DataRow newrow = ResultTable.NewRow();
32            for(j = 0; j < TempColName.Length; j++)
33            {
34                newrow[j] =string.Copy(value[i, j].ToString());
35            }
36            ResultTable.Rows.Add(newrow);
37        }
38    }
39    returnResultTable;
40}

建立空的DataTable從資料庫的表格定義

view source
print?
01/// <summary>
02/// 建立空的DataTable從資料庫的表格定義
03/// </summary>
04/// <param name="connectString">The connect string.</param>
05/// <param name="TableName">Name of the table.</param>
06/// <returns></returns>
07public static DataTable CreateEmptyDataTableFromDb(stringconnectString, stringTableName)
08{
09    DataTable dt =new DataTable();
10    stringSqlCmd = "Select * from "+ TableName + " where 1 <> 1";
11    using(SqlConnection cn = newSqlConnection(connectString))
12    {
13        cn.Open();
14        using(SqlCommand cmd = newSqlCommand(SqlCmd, cn))
15        {
16            using(SqlDataReader dr = cmd.ExecuteReader())
17            {
18                dt.Load(dr);
19            }
20        }
21    }
22    returndt;
23}

將SqlDataSource select之後的資料轉成DataTable

view source
print?
01/// <summary>
02/// 將SqlDataSource select之後的資料轉成DataTable
03/// </summary>
04/// <param name="Source">The source.</param>
05/// <returns></returns>
06public static DataTable SqlDataSourceToDataTable(SqlDataSource Source)
07{
08    DataView dv = (DataView)Source.Select(DataSourceSelectArguments.Empty);
09    returndv.Table;
10}

得到查詢後的結果

 

view source
print?
01/// <summary>
02/// Gets the query result.
03/// </summary>
04/// <param name="connectString">The connect string.</param>
05/// <param name="SqlCmd">The SQL CMD.</param>
06/// <returns></returns>
07public static DataTable GetQueryResult(stringconnectString, stringSqlCmd)
08{
09    DataTable dt =new DataTable();
10    using(SqlConnection cn = newSqlConnection(connectString))
11    {
12        cn.Open();
13        using(SqlCommand cmd = newSqlCommand(SqlCmd, cn))
14        {
15            using(SqlDataReader dr = cmd.ExecuteReader())
16            {
17                dt.Load(dr);
18            }
19        }
20    }
21    returndt;
22}

將DataTable中選取的列轉為字串陣列

將字串陣列轉為DataRow根據DataTable定義

view source
print?
01/// <summary>
02/// 將DataTable中選取的列轉為字串陣列
03/// </summary>
04/// <param name="dt">The dt.</param>
05/// <param name="SelectIndex">Index of the select.</param>
06/// <returns></returns>
07public static string[] DataTableRowToString(DataTable dt,int SelectIndex)
08{
09    try
10    {
11        string[] result =new string[dt.Columns.Count];
12        for(int i = 0; i < dt.Columns.Count; i++)
13            result[i] = dt.Rows[SelectIndex][i].ToString();
14        returnresult;
15    }
16    catch(Exception e)
17    {            
18        returnnull;
19    }
20}
21/// <summary>
22/// 將字串陣列轉為DataRow根據DataTable定義
23/// </summary>
24/// <param name="dt">The dt.</param>
25/// <param name="InputData">The input data.</param>
26/// <returns></returns>
27public static DataRow StringToDataRow(DataTable dt, string[] InputData)
28{
29    try
30    {
31        DataRow a = dt.NewRow();
32        for(int i = 0; i < dt.Columns.Count; i++)
33            a[i] =string.Copy(InputData[i]);
34        returna;
35    }
36    catch(Exception e)
37    {            
38        returnnull;
39    }
40}

 

選出DataRow從DataTable

 

view source
print?
01/// <summary>
02/// 選出DataRow從DataTable
03/// </summary>
04/// <param name="dt">The dt.</param>
05/// <param name="Condition">The condition.</param>
06/// <returns></returns>
07public static DataRow[] SelectFromDataTable(DataTable dt,string Condition)
08{
09    if(Condition != string.Empty)
10        returndt.Select(Condition);
11    else
12        returndt.Select();
13}

將DataTable根據欄位名稱順向排序

 

view source
print?
01/// <summary>
02/// 將DataTable根據欄位名稱順向排序
03/// </summary>
04/// <param name="dt">The dt.</param>
05/// <param name="ColumnName">Name of the column.</param>
06/// <returns></returns>
07public static DataRow[] SortDataTableAsc(DataTable dt,string ColumnName)
08{
09    returndt.Select("", ColumnName +" Asc");
10}

將DataTable根據欄位名稱逆向排序

 

view source
print?
01/// <summary>
02/// 將DataTable根據欄位名稱逆向排序
03/// </summary>
04/// <param name="dt">The dt.</param>
05/// <param name="ColumnName">Name of the column.</param>
06/// <returns></returns>
07public static DataRow[] SortDataTableDesc(DataTable dt,string ColumnName)
08{
09    returndt.Select("", ColumnName +" desc");
10}

將DataTable欄位名稱位置交換

 

view source
print?
01/// <summary>
02/// 將DataTable欄位名稱位置交換
03/// </summary>
04/// <param name="dtSource">The dt source.</param>
05/// <param name="ColumnName">Name of the column.</param>
06/// <param name="ColumnIndex">Index of the column.</param>
07/// <returns></returns>
08public static DataTable ExchangeDataColumn(DataTable dtSource,string ColumnName,string ColumnIndex)
09{
10    DataTable dt =new DataTable();
11    dt = dtSource;
12    //變更欄位
13    dt.Columns[ColumnName].SetOrdinal(Convert.ToInt16(ColumnIndex));
14    returndt;
15}

從DataTable找單主鍵值符合的資料

view source
print?
01/// <summary>
02/// 從DataTable找單主鍵值符合的資料.
03/// </summary>
04/// <param name="dtSource">The dt source.</param>
05/// <param name="ColumnName">Name of the column.</param>
06/// <param name="ColumnValue">The column value.</param>
07/// <returns></returns>
08public static DataTable FindDataTableSingleKey(DataTable dtSource,string ColumnName,string ColumnValue)
09{
10    DataTable dt = dtSource;
11    //1.設定主鍵
12    dt.PrimaryKey =new DataColumn[] { dt.Columns[ColumnName] };
13    //2.搜尋DataRow
14    DataRow dr = dt.Rows.Find(ColumnValue);
15    if(dr != null)
16    {
17        //3.將找到的資料放到另一個DataTable
18        DataTable newdt =new DataTable();
19        foreach(DataColumn column indt.Columns)
20        {
21            newdt.Columns.Add(column.ToString());
22        }
23        DataRow newdr = newdt.NewRow();
24        inti = 0;
25        //讀取過濾的資料
26        newdr = newdt.NewRow();
27        foreach(object item in dr.ItemArray)
28        {
29            newdr[i] = dr.ItemArray[i];
30            i++;
31        }
32        newdt.Rows.Add(newdr);
33        returnnewdt;
34    }
35    else
36    {
37        returnnull;
38    }
39}

從DataTable找多重主鍵值符合的資料

view source
print?
01/// <summary>
02/// 從DataTable找多重主鍵值符合的資料.
03/// </summary>
04/// <param name="dtSource">The dt source.</param>
05/// <param name="ColumnName">Name of the column.</param>
06/// <param name="ColumnValue">The column value.</param>
07/// <returns></returns>
08public static DataTable FindDataTableMultiKey(DataTable dtSource,string[] ColumnName,string[] ColumnValue)
09{
10    DataTable dt = dtSource;
11    //1.設定多個主鍵
12    DataColumn[] MultiKey =new DataColumn[ColumnName.Length];
13    for(int j = 0; j < ColumnName.Length; j++)
14        MultiKey[j] = dt.Columns[ColumnName[j].ToString()];
15    dt.PrimaryKey = MultiKey;
16    //2.欲查詢的資料
17    object[] search =new object[ColumnValue.Length];
18    for(int i = 0; i < search.Length; i++)
19    {
20        search[i] =string.Copy(ColumnValue[i]);
21    }
22    //3.搜尋DataRow
23    DataRow dr = dt.Rows.Find(search);
24    if(dr != null)
25    {
26        //4.將找到的資料放到另一個DataTable
27        DataTable newdt =new DataTable();
28        foreach(DataColumn column indt.Columns)
29        {
30            newdt.Columns.Add(column.ToString());
31        }
32        DataRow newdr = newdt.NewRow();
33        inti = 0;
34        //讀取過濾的資料
35        newdr = newdt.NewRow();
36        foreach(object item in dr.ItemArray)
37        {
38            newdr[i] = dr.ItemArray[i];
39            i++;
40        }
41        newdt.Rows.Add(newdr);
42        returnnewdt;
43    }
44    else
45    {
46        returnnull;
47    }
48}

將DataRow加入DataTable

view source
print?
01/// <summary>
02/// 將DataRow加入DataTable.
03/// </summary>
04/// <param name="dtSource">The dt source.</param>
05/// <param name="dr">The dr.</param>
06/// <returns></returns>
07public static DataTable MergeSearchDataToTable(DataTable dtSource, DataRow[] dr)
08{
09    //建立新的DataTable    
10    DataTable dt =new DataTable();
11    //建立新的DataTable Columns    
12    foreach(DataColumn dc indtSource.Columns)
13    {
14        dt.Columns.Add(dc.ToString());
15        dt.Columns[dc.ToString()].DataType = dc.DataType;
16    }
17    inti = 0;    //讀取過濾的資料    
18    foreach(DataRow item indr)
19    {
20        DataRow row = dt.NewRow();
21        i = 0;
22        foreach(DataColumn dc indtSource.Columns)
23        {
24            //建立DataRow的資料            
25            row[dc.ToString()] = item.ItemArray[i];
26            i++;
27        }
28        dt.Rows.Add(row);
29    }
30    returndt;
31}
原创粉丝点击