DataTable詭異的事情

來源:互聯網
上載者:User

 今天在工作中遇到一個詭異的問題,代碼如下:

private DataTable CovertDataType(DataTable orgDataTable, string colNames, string convertCol, YstPack.Common.ColumnType convertDataType)        {            DataTable dt = new DataTable();            //複製表結構            dt = orgDataTable.Clone();            foreach (DataColumn column in dt.Columns)            {                if (column.ColumnName == convertCol)                {                    //修改列類型                    column.DataType = typeof(Guid);                }            }            string[] colArry = colNames.Split(',');            foreach (DataRow dr in orgDataTable.Rows)            {                DataRow newdr = dt.NewRow();                foreach (string str in colArry)                {                    if (str == convertCol)//轉換列資料類型                    {                        switch (convertDataType)                        {                            case YstPack.Common.ColumnType.唯一標識:                                newdr[str] = new Guid(dr[str].ToString());                                break;                            default:                                break;                        }                    }                    else                    {                        newdr[str] = dr[str];//不需要轉化,直接賦值,但是這裡就拋出異常!                    }                }                dt.Rows.Add(newdr);            }            return dt;        }

 

 
運行 foreach (string str in colArry)迴圈第一次能成功,但是第二次就報列“X”不屬於表異常 !不知道這是不是一個bug!
後面把代碼改成如下又正確了:
  

private DataTable CovertDataType(DataTable orgDataTable, string colNames, string convertCol, YstPack.Common.ColumnType convertDataType)        {            DataTable dt = new DataTable();            try            {                //複製表結構                dt = orgDataTable.Clone();                foreach (DataColumn column in dt.Columns)                {                    if (column.ColumnName == convertCol)                    {                        //修改列類型                        column.DataType = typeof(Guid);                    }                }                string[] colArry = colNames.Split(',');                foreach (DataRow dr in orgDataTable.Rows)                {                    DataRow newdr = dt.NewRow();                    for (int i = 0; i < colArry.Length; i++)                    {                        if (colArry[i].ToString() == convertCol)//轉換列資料類型                        {                            newdr[i] = new Guid(dr[i].ToString());                        }                        else                        {                            newdr[i] = dr[i];                        }                    }                                        dt.Rows.Add(newdr);                }            }            catch (Exception e)            {                MessageBox.Show(e.Message);            }            return dt;        }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.