在数据表中存储0.0时,它仅存储为0

时间:2010-01-01 04:41:02

标签: c# asp.net

有疑问希望有人可以提供帮助。

我有一个数据表dt1,它有三列a,b,c(数据类型为string,float,float resp)。 然后我有一个数据表dt2,它是dt1的克隆,dt1的值合并为dt2。

现在问题出在特定情况:

第一行是这样的:

dt1.Rows.Add("xyz", 0.0, 0.0);

但我可以看到该值在数据表中被视为xyz,0,0。 这个我和dt2合并为

if (dt2 == null)

     {
         dt2 = dt1.Clone();
     }

     dt2.Merge(dt1, true);

现在,当我第二次合并时说dt1中的某个值为(“mnp”,4.5,8.9)我在dt2.Merge(dt1, true);

时收到错误
  

错误:.b和.b有   冲突的属性:DataType   财产不匹配。

其中b是列名。

将表格dt1定义为:

DataTable dt1 = new DataTable();

   dt1.Columns.Add("a", typeof(string));

   dt1.Columns.Add("b", typeof(float));

   dt1.Columns.Add("c", typeof(float));`

2 个答案:

答案 0 :(得分:1)

Avi,以下代码在VS 2008中使用Target Frameworks 2.0,3.0和3.5运行时没有错误:

using System.Data;

namespace DtCheck
{
    class Program
    {
        static void Main()
        {
            DataTable dt1 = new DataTable();

            dt1.Columns.Add("a", typeof(string));
            dt1.Columns.Add("b", typeof(float));
            dt1.Columns.Add("c", typeof(float));

            dt1.Rows.Add("xyz", 0.0, 0.0);

            DataTable dt2;

            dt2 = dt1.Clone();

            dt2.Merge(dt1, true);

            dt1.Rows.Add("mnp", 4.5, 8.9);

            dt2.Merge(dt1, true);
        }
    }
}

你可以在你的机器上试试我的程序吗?结果是什么?如果它也有效,程序中的某些东西必须是不同的。

也许你在第二次合并之前将dt2重新分配给其他东西?或者它是否已设置为“if(dt2 == null)”,以便Clone()不执行?

顺便说一下:第一个克隆/合并可以减少到dt2 = dt1.Copy()

答案 1 :(得分:0)

如果你用“f”??

后缀它们怎么样?

("mnp",4.5f,8.9f)

我想也许他们被编译器解释为double而不是float。