我现在写一个保存功能.保存事件里写
 
string strParaXml = "<CitedWater ID='" + strID + "'  AllSupply='" + TBXAllSupply.Text + "' ></CitedWater>";
strParaXml = "<root>" + strParaXml + "</root>";SQL 存储过程里解析XML 到表里
exec sp_xml_preparedocument @intDoc OUTPUT, @chrXML
select * into ##SaleD
from      openxml (@intDoc, '/root/CitedWater',1)
with (ID nvarchar(50),[Year] bigint,AllSupply numeric(18, 2))
问题出来了 TBXAllSupply.Text 有可能为空 这样就会出现varchar转换numeric出错我想问 能不能判断TBXAllSupply.Text 值为空时传 null 进去,这样就不会出现错误了PS: 我试过把TBXAllSupply.Text该成null 或者 dbnull.values  到XML里都识别为'null'或'' 而不是真正的null 保存时还会出现类型转换出错谁做过相似的,告诉下, 要不然我只能去SQL里面写函数 然后挨个判断了. 我想把这个扔到代码里处理

解决方案 »

  1.   

    兄弟你为什么不考虑修改存储过程,修改存储过程是最简单的,因为存储过程在和表通讯的时候是可以直接插入null,在和应用程序通讯的时候,可以判断输入的值的长度是0,还是'null'
      

  2.   

    哪怕你就是传一个长度为0的字符串进去,你在里面判断一下,将这个值改变为一个可以转换成numeric的有效值。再进行写入。
      

  3.   

    我考虑过存储过程, 我还写了个字定义函数. 用来返回是不是null但是我觉得麻烦.  
    如果能写到代码里就好了
      

  4.   

    xml就是字符串,字符串里面没有null的
    你看这样可行不
    if(TBXAllSupply.Text == "")
    string strParaXml = "<CitedWater ID='" + strID + "'></CitedWater>"; 
    strParaXml = "<root>" + strParaXml + "</root>";
      

  5.   

    字符串中夹杂null类型的值肯定是不行的,区别对待吧!为空时不插该值
      

  6.   

    呵呵, 那我得写多少判断啊。   还不如扔SQL里面那