问题描述
数据库为Oracle,表为Pipe,其中有一字段为PIPE_LENGTH(number类型)代码如下:Models.PIPENET_STATICmypipe=newModels.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类型呀这个问题困扰我几天了拜托各位了
解决方案
解决方案二:
因为你的mypipe.PIPE_LENGTH是int型的
解决方案三:
数据库中PIPE_LENGTH字段为number类型
解决方案四:
mypipe.PIPE_LENGTH=Convert.ToInt32(Convert.ToDouble(txtPipeLength.Text.Trim()));
上面是不会报错的,只不过都转换成int了。
解决方案五:
publicintGetInt32(stringstr){intres=0;try{res=Convert.ToInt32(str.Trim());}catch{res=0;}returnres;}
解决方案六:
number类型你设置精度多少?number(10)?number(10,2)?等等
解决方案七:
mypipe.PIPE_LENGTH=txtPipeLength.Text.Trim()==""?0:double.Parse(txtPipeLength.Text.Trim());这里的PIPE_LENGTH的类型要是double不是你数据库字段的类型,而是Models.PIPENET_STATIC类中PIPE_LENGTH属性的类型
解决方案八:
支持楼上。类型有问题
解决方案九:
用小数的数据类型吧
解决方案十:
数据库表里的字段PIPE_LENGTH指定精度看看,例如number(10,2)
解决方案十一:
Models.PIPENET_STATICmypipe=newModels.PIPENET_STATIC();doublenum=0;double.TryParse(txtPipeLength.Text.Trim());,outnum):mypipe.PIPE_LENGTH=num;
解决方案十二:
不知道楼主非要把空字符串转成数字干什么用?如果非要那样则可以做一下判断即可stringstr=txtPipeLength.Text.Trim();if(!string.IsNullOrEmpty(str)){intresult=0;if(int.TryParse(str,outresult))//整数{mypipe.PIPE_LENGTH=Int32.Parse(str);}}
解决方案十三:
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”之间没有隐式转换”请问如何操作呢?
解决方案十四:
回复中很多都是当字符串为空时就把0赋值给mypipe.PIPE_LENGTH,那就意味着写入数据库的是0,而我其实不想写入0就希望数据库中该字段为空就行
解决方案十五:
那就要看你这个字段是如何定义的了,在PIPE_LENGTH点击右键选择“转到定义”,看看这个字段到底是怎么定义的,设置成可空类型int?PIPE_LENGTH;
解决方案:
你其实可以在做数据保存操作时进行判断,如果是最小或最大值则赋DBNull.Value就好了前面就这样改好了:mypipe.PIPE_LENGTH=txtPipeLength.Text.Trim()==""?double.MinValue:Convert.ToDouble(TextBox1.Text.Trim());
解决方案:
引用12楼whysoso2008的回复:
double类型的问题解决了是我models层定义有问题现在的问题是mypipe.PIPE_LENGTH=txtPipeLength.Text.Trim()==""?Convert.ToDouble(null):Convert.ToDouble(TextBox1.Text.Trim());当txtPipeLength不输入值时候我就希望给mypipe.P……
值类型是不能为null的就算能为null你想把数据库字段写成null也不能传递null,而是要在数据库的更新语句中写成字符串“null”或者在存储过程中使用其数据库相应的null类型