無法建立連結伺服器 "(null)" 的 OLE DB 提供者 "Microsoft.ACE.OLEDB.12.0" 的執行個體。
若出現以上錯誤訊息,則可先確認 是否安裝 64位元版本 (http://goo.gl/8NtKXO) ,
或確認 Microsoft.ACE.OLEDB.12.0 是否有在屬性中開啟權限
#region 準備範例資料
//建立DataTable
DataTable dt = new DataTable();
//新增2欄位
dt.Columns.Add("Name");
dt.Columns.Add("TEL");
//寫入直向的10筆資料
for (int i = 1; i < 11; i++)
{
DataRow dr = dt.NewRow();
dr[0] = "A" + i;
dr[1] = "B" + i;
dt.Rows.Add(dr);
}
#endregion
//建立新的DataTablle
DataTable dtNew = new DataTable();
for (int i = 1; i < 4; i++)
{
dtNew.Columns.Add("Name" + i);
dtNew.Columns.Add("TEL" + i);
}
#region 開始準備進行轉為橫向
//dtNew 的新DataRow
DataRow drNew = dtNew.NewRow();
int iLast = 1; //用來記錄跑到第幾個舊資料列
//用來說明寫入的是新資料列的第幾個Cell
int iCellCount = 0;
//開始by 每一個舊資料的Rows 寫入新的DataTable
foreach (DataRow item in dt.Rows)
{
//寫入每個Rows的特定Column內
drNew[iCellCount] = item["Name"].ToString();
drNew[iCellCount + 1] = item["TEL"].ToString();
iCellCount = iCellCount + 2; //用來計算第幾個Column
//如果裝滿了一個Row,就在dtNew中新增新的Row
if (iCellCount >= 6)
{
iCellCount = 0;
dtNew.Rows.Add(drNew);
drNew = dtNew.NewRow();
}
//如果是最後一筆資料,直接新增進dtNew
else if (iLast == item.Table.Rows.Count)
{
dtNew.Rows.Add(drNew);
}
//紀錄 +1
iLast += 1;
}
#endregion
圖、3 完成後的資料
我相信一定會有更好的方法可以將DataTable 由直向轉為橫向呈現,也歡迎各位用力鞭打。
但目前還沒有知道更好的方法之前,可能先暫時以這種方式進行囉!!