数据库为Oracle,表为Pipe ,其中有一字段为 PIPE_LENGTH  (number类型)代码如下:
 Models.PIPENET_STATIC mypipe = new Models.PIPENET_STATIC(); mypipe.PIPE_LENGTH = Convert.ToInt32(txtPipeLength.Text.Trim());说明:如果txtPipeLength 输入数字,比如 5  则不报错!
如果不输入,或者输入为5.3  则报错,大致意思是“输入字符串的格式不正确。” 
请问我改如何写代码?
要求:1、可以不输入;2、可以输入小数点的数字说明 我这样写 mypipe.PIPE_LENGTH = Convert.ToDouble(TextBox1.Text.Trim());
提示:错误  无法将类型“double”隐式转换为“int?”。存在一个显式转换(是否缺少强制转换?)奇怪 我数据库是number类型呀 这个问题困扰我几天了  拜托各位了

解决方案 »

  1.   

    因为你的mypipe.PIPE_LENGTH是int型的
      

  2.   

    数据库中  PIPE_LENGTH 字段为number 类型 
      

  3.   


    mypipe.PIPE_LENGTH = Convert.ToInt32(Convert.ToDouble(txtPipeLength.Text.Trim()));上面是不会报错的,只不过都转换成int了。
      

  4.   


    public int GetInt32(string str)
    {
       int res=0;
       try
    {
       res=Convert.ToInt32(str.Trim());
    }
    catch
    {
    res=0;
    }
    return res;
    }
      

  5.   

    number类型你设置精度多少?number(10)?number(10,2)?等等
      

  6.   


    mypipe.PIPE_LENGTH =txtPipeLength.Text.Trim()==""?0: double.Parse(txtPipeLength.Text.Trim());这里的PIPE_LENGTH 的类型要是double 不是你数据库字段的类型,而是
    Models.PIPENET_STATIC类中PIPE_LENGTH属性的类型
      

  7.   

    数据库表里的字段
    PIPE_LENGTH 指定精度看看,例如 number(10,2)
      

  8.   

    Models.PIPENET_STATIC mypipe = new Models.PIPENET_STATIC();          double num = 0;
              double.TryParse(txtPipeLength.Text.Trim());,out num):            mypipe.PIPE_LENGTH= num;
      

  9.   

    不知道楼主非要把空字符串转成数字干什么用?
    如果非要那样则可以做一下判断即可string str = txtPipeLength.Text.Trim();
                if (!string.IsNullOrEmpty(str))
                {
                    int result = 0;
                    if (int.TryParse(str, out result)) //整数
                    {
                        mypipe.PIPE_LENGTH = Int32.Parse(str);
                    }
                }
      

  10.   

    double 类型的问题解决了  是我models层定义有问题
    现在的问题是
     mypipe.PIPE_LENGTH = txtPipeLength.Text.Trim() == "" ? Convert.ToDouble(null) : Convert.ToDouble(TextBox1.Text.Trim());当txtPipeLength 不输入值时候  我就希望给 mypipe.PIPE_LENGTH  为空值  ,但上面的语句结果是当不输入时则为0,如果为0  则在数据操作时候就把 0插入表中了  这个合乎要求的。但 如下这样写:
     mypipe.PIPE_LENGTH = txtPipeLength.Text.Trim() == "" ? null : Convert.ToDouble(TextBox1.Text.Trim()); 则报错  “无法确定条件表达式的类型,因为“<null>”和“double”之间没有隐式转换” 请问如何操作呢?
      

  11.   

    回复中很多都是当字符串为空时 就把 0 赋值给mypipe.PIPE_LENGTH  ,那就意味着写入数据库的是0,而我其实不想写入0  就希望数据库中该字段为空就行
      

  12.   

    那就要看你这个字段是如何定义的了,在PIPE_LENGTH点击右键选择“转到定义”,看看这个字段到底是怎么定义的,设置成可空类型 int? PIPE_LENGTH;
      

  13.   

    你其实可以在做数据保存操作时进行判断,如果是最小或最大值则赋DBNull.Value就好了
    前面就这样改好了:
    mypipe.PIPE_LENGTH = txtPipeLength.Text.Trim() == "" ? double.MinValue : Convert.ToDouble(TextBox1.Text.Trim()); 
      

  14.   

    值类型是不能为null的
    就算能为null你想把数据库字段写成null也不能传递null,而是要在数据库的更新语句中写成字符串“null”
    或者在存储过程中使用其数据库相应的null类型