none
DataTable中数据替换问题 RRS feed

  • 问题

  • 我有一个datatable其中有A、B、C、D四列,B,C,D列中存放的数据是:"是","否",现在我想把这个datatable插入到数据库中,在数据库中B,C,D列对应的数据类型是bit类的,请问有什么方法可以快速的把"是"和"否"字段替换成:0和1吗?

    2012年5月1日 12:30

答案

  • 我是利用这样的方式删除DataRow,似乎没有遇到你所说的情况,可以请你把你的程序代码贴上来看看吗?

    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("c1", Type.GetType("System.String")));
    
    DataColumn dc = new DataColumn("c2", Type.GetType("System.Boolean"));
    dc.Expression = "iif (c1 = '是',1,0)";
    dt.Columns.Add(dc);
    
    DataRow dr = dt.NewRow();
    dr[0] = "是";
    dt.Rows.Add(dr);
    
    foreach (DataRow row in dt.Rows)
    {
    	Console.WriteLine(string.Format("{0}.{1}", row[0], row[1]));
    }
    
    dt.Rows[0].Delete();
    Console.WriteLine(dt.Rows.Count);
    Console.Read();


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年5月2日 3:52

全部回复

  • 或许你可以考虑利用 DataColumn的Expression属性来做。

    http://www.dotblogs.com.tw/terrychuang/archive/2012/05/01/71922.aspx


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年5月1日 14:41
  • 我试着用了,可是这样另外一列就会依赖另一个列,我想把其中一列删除的话,就没法删了啊。

    如果只对一列删除就产生如下错误:不能设置 Expression 属性,因为表达式中存在循环引用。

    2012年5月1日 14:58
  • 我是利用这样的方式删除DataRow,似乎没有遇到你所说的情况,可以请你把你的程序代码贴上来看看吗?

    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("c1", Type.GetType("System.String")));
    
    DataColumn dc = new DataColumn("c2", Type.GetType("System.Boolean"));
    dc.Expression = "iif (c1 = '是',1,0)";
    dt.Columns.Add(dc);
    
    DataRow dr = dt.NewRow();
    dr[0] = "是";
    dt.Rows.Add(dr);
    
    foreach (DataRow row in dt.Rows)
    {
    	Console.WriteLine(string.Format("{0}.{1}", row[0], row[1]));
    }
    
    dt.Rows[0].Delete();
    Console.WriteLine(dt.Rows.Count);
    Console.Read();


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年5月2日 3:52
  •              DataColumn colA = new DataColumn("A");
                 DataColumn colB = new DataColumn("B");
                 excelTable.Columns.Add(colA);
                 excelTable.Columns.Add(colB);
                 colA.Expression = "IIF(C='是', 1, 0)";
                 colB.Expression = "IIF(D='是',1,0)";
                 excelTable.Columns.Remove("C");
                 excelTable.Columns.Remove("D");
               


    我想把作为条件的那两列给删除,可是因为之前做为条件就成了一个依赖了,就没法删除了
    2012年5月2日 7:06
  • 你的Expression好像跟我的做法不一样,我是建立一个新的DataColumn再来指定他的Expression属性,而且从你的程序代码看起来,并没有名称为C和D的DataColumn。

    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年5月3日 0:47
  • 你好,可能是我没写清楚,C,D两列是已经存在DdataTable中的.就以你的代码来说 ,

    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("c1", Type.GetType("System.String")));
    
    DataColumn dc = new DataColumn("c2", Type.GetType("System.Boolean"));
    dc.Expression = "iif (c1 = '是',1,0)";
    dt.Columns.Add(dc);
    
    添加完dc后,那么DataTable中的c1列是不是就不能删除了?
    2012年5月8日 3:01