使用Oracle存储过程问题,参数为空抱错

dgrwang 2006-12-05 09:34:58
在程序中使用Oracle存储过程,例如有一个content列类型为varchar2型,当我使用一个String型给他传参时,如果String没有被赋值,那么就是"",但是存储过程就会抱错,不允许插入""
这个怎么解决啊
...全文
597 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dgrwang 2006-12-07
  • 打赏
  • 举报
回复
问题已解决
方法跟liujia_0421类似,写了个函数,在赋值前对空字符串进行判断,空的返回system.DBNull.value
liujia_0421 2006-12-06
  • 打赏
  • 举报
回复
TO:一般是这样的,例如我用 string strID=txtcontent.Text.trim()
如果这个输入框没有任何输入,那肯定string strID=""
然后存储过程就出错了,不可能对每一个变量都判断吧,有没有针对存储过程修改的方法
SQL server就没问题,oracle真变态

作个判断:

if (str=null || str="")
{
//插入时用DBValue.Null即可...
}

dgrwang 2006-12-06
  • 打赏
  • 举报
回复
一般是这样的,例如我用 string strID=txtcontent.Text.trim()
如果这个输入框没有任何输入,那肯定string strID=""
然后存储过程就出错了,不可能对每一个变量都判断吧,有没有针对存储过程修改的方法
SQL server就没问题,oracle真变态
net_boy 2006-12-06
  • 打赏
  • 举报
回复
string strID=string.Empty;
net_boy 2006-12-06
  • 打赏
  • 举报
回复
string strID = string.empty;
看看行不
dgrwang 2006-12-06
  • 打赏
  • 举报
回复
列设置的是允许为空的,用sql语句是可以插入的,但是用程序写的存储过程就出错了
Reeezak 2006-12-06
  • 打赏
  • 举报
回复
oracle 中 空字符串将被等同于NULL

所以如果你的字段为NOT NULL的VARCHAR2,那么将不能存储空字符串

如果一定要使用空字符串,就必须将列定义为“允许为空”
dgrwang 2006-12-06
  • 打赏
  • 举报
回复
???
net_boy 2006-12-05
  • 打赏
  • 举报
回复
sqlCmd.Parameters.Add(":name", OracleType.varchar2).Value = strID
这样写不对吧
strID应该位于add方法里面吧
dgrwang 2006-12-05
  • 打赏
  • 举报
回复
例如
string strID;
Dim sqlCmd As OracleCommand = New OracleCommand("update test set name=:name", sqlConn)
sqlCmd.Parameters.Add(":name", OracleType.varchar2).Value = strID
当我的strID未赋值时,这个存储过程就会引起错误
net_boy 2006-12-05
  • 打赏
  • 举报
回复
像sql server的存储过程那样 给他进行参数类型转换
liujia_0421 2006-12-05
  • 打赏
  • 举报
回复
或者你就别往里面插入""..

这个问题我以前也遇到过...
liujia_0421 2006-12-05
  • 打赏
  • 举报
回复
至于怎么解决,将数据库中的字段非空约束去掉..
liujia_0421 2006-12-05
  • 打赏
  • 举报
回复
往Oracle数据库中存储时,如果你要存入的值为"",它会将其作为null值处理,如果你的表中有非空限制就会出错的..
dgrwang 2006-12-05
  • 打赏
  • 举报
回复
这么写好久了,怎么成不对了呢,晕。。。
测试管理与QualityCenter培训手册 1、测试流程管理、测试度量方法 按照尽早进行测试的原则,测试人员应该在需求阶段就介入,并贯穿软件开发的全过程。就测试过程本身而言,应该包含以s下几个阶段。  -测试需求的分析和确定。  -测试计划。  -测试设计。  -测试执行。  -测试记录和缺陷跟踪。  -回归测试。  -测试总结和报告。 一个好的测试管理工具应该能把以上几个阶段都管理起来。 测试人员每时每刻都在度量别人的工作成果,而测试人员的工作成果又由谁来度量呢?度量的标准和依据是什么呢?软件测试的度量是测试管理必须仔细思考的问题。缺乏尺度会让测试失去平衡,缺乏标准会让测试工作难以衡量。 2、如何搭建测试管理平台? 首要问题是流程的规范化。 (1) 测试进入和退出标准。 (2) 协作流程。 (3) 缺陷跟踪管理流程。 (4) 工具平台的引入。 目前主流测试管理平台与缺陷跟踪工具: 3、QC(Quality Center)介绍 QC标准测试管理流程 QC支持的应用服务器:Jboss、WebLogic、WebSphere QC支持的数据库:Oracle、SQLServer QC支持的操作系统:Windows、Linux、Solaris 支持群集: 服务器端硬件和数据库要求: Windows: Linux: Solaris: 客户端系统要求: 练习1:安装QC 详见《Mercury Quality Center 9.0 Installation Guide》 Win2003+SQLServerSp4+QC9.0安装示例 1、安装Windows Server 2003 Enterprise Edition、安装IIS邮件服务器 2、安装SQL Server 2000、打上补丁Sp4 安装好SQL Server 2000后注意启动SQLServer服务器 3、安装QC9.0 服务器名称也可以是IP地址 4、启动QC9.0 5、QC9.0安装问题解决 - JBOSS启动不了 原因:8080端口被其他应用程序占用。 用netstat查看谁占用了8080端口 netstat -ano 解决办法1:修改其他程序的端口使用 解决办法2:修改JBOSS的启动端口 JBOSS_HOME\server\default\deploy\jbossweb-tomcat55.sar\server.xml 6、修改IP地址后不能登录QC 解决办法: 在C:\Program Files\Mercury\Quality Center\jboss\server\default\deploy目录下找到10sabin.war 进入10sabin.war\WEB-INF,修改siteadmin.xml中的IP地址: 修改数据库中的数据: 修改后可以登陆 但是还需要修改以前Project的数据库连接属性 否则会提示误 然后还要修改 C:\Program Files\Mercury\Quality Center\repository\qc中的dbcon.txt: qcsiteadmin_db@192.168.1.12.1433. 还有 C:\Program Files\Mercury\Quality Center\repository\qc\Default\QualityCenter_Demo_db中的dbid.xml 192.168.1.12 7、Mercury Tours 样例程序 启动:http://192.168.1.2:8080/mtours 注意安装JVM才能“View Calendar” 4、创建和定义测试需求、测试需求管理、跟踪 定义需求 1、查看需求 视图->需求树 2、添加需求 需求->新建需求 输入以下内容 3、添加子需求项 查看需求 ZooIn : CTRL + I ZooOut : CTRL + O 视图->编号 视图->需求网格 视图->筛选/排序->设置筛选器/排序 设置排序字段 设置过滤条件 修改需求 拷贝需求项Cruise Reservation 重命名需求项Cruise Reservation_Copy_1为Hotel Reservation 移动需求项

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧