在程序中使用Oracle存储过程,例如有一个content列类型为varchar2型,当我使用一个String型给他传参时,如果String没有被赋值,那么就是"",但是存储过程就会抱错,不允许插入""
这个怎么解决啊

解决方案 »

  1.   

    像sql server的存储过程那样 给他进行参数类型转换
      

  2.   

    例如
    string strID;
    Dim sqlCmd As OracleCommand = New OracleCommand("update test set name=:name", sqlConn)
     sqlCmd.Parameters.Add(":name", OracleType.varchar2).Value = strID
    当我的strID未赋值时,这个存储过程就会引起错误
      

  3.   

    sqlCmd.Parameters.Add(":name", OracleType.varchar2).Value = strID
    这样写不对吧
    strID应该位于add方法里面吧
      

  4.   

    往Oracle数据库中存储时,如果你要存入的值为"",它会将其作为null值处理,如果你的表中有非空限制就会出错的..
      

  5.   

    列设置的是允许为空的,用sql语句是可以插入的,但是用程序写的存储过程就出错了
      

  6.   

    string strID = string.empty;
    看看行不
      

  7.   

    一般是这样的,例如我用 string strID=txtcontent.Text.trim()
    如果这个输入框没有任何输入,那肯定string strID=""
    然后存储过程就出错了,不可能对每一个变量都判断吧,有没有针对存储过程修改的方法
    SQL server就没问题,oracle真变态
      

  8.   

    oracle 中 空字符串将被等同于NULL所以如果你的字段为NOT NULL的VARCHAR2,那么将不能存储空字符串如果一定要使用空字符串,就必须将列定义为“允许为空”
      

  9.   

    TO:一般是这样的,例如我用 string strID=txtcontent.Text.trim()
    如果这个输入框没有任何输入,那肯定string strID=""
    然后存储过程就出错了,不可能对每一个变量都判断吧,有没有针对存储过程修改的方法
    SQL server就没问题,oracle真变态作个判断:if (str=null || str="")
    {
        //插入时用DBValue.Null即可...
    }
      

  10.   

    问题已解决
    方法跟liujia_0421类似,写了个函数,在赋值前对空字符串进行判断,空的返回system.DBNull.value