首页 新闻 搜索 专区 学院

关于C#向oracle 中插入数据的问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-12-27 15:23

oracle中的每个表都是用代码生成器生成的方法,其中insert 方法是把表的每个字段都设一个变量,有的时候不需要每个字段都有值,但是如果不给每个字段赋值,就会报错。很纠结!恳请高人为我解决这个问题!

问题补充:

这个是代码生成器生成的  

/// <summary>
  /// 增加一条数据
  /// </summary>
  public void Add(CitCyjw.Model.CIT_INFORMANTS model)
  {
   StringBuilder strSql=new StringBuilder();
   strSql.Append("insert into CIT_INFORMANTS(");
   strSql.Append("ID,USERNAME,PASSWORD,CNAME,SEX,PHONE,CARDID,REMARK,FLAG)");
   strSql.Append(" values (");
   strSql.Append(":ID,:USERNAME,:PASSWORD,:CNAME,:SEX,:PHONE,:CARDID,:REMARK,:FLAG)");
   OracleParameter[] parameters = {
     new OracleParameter(":ID", OracleType.Number,20),
     new OracleParameter(":USERNAME", OracleType.NVarChar),
     new OracleParameter(":PASSWORD", OracleType.NVarChar),
     new OracleParameter(":CNAME", OracleType.NVarChar),
     new OracleParameter(":SEX", OracleType.NVarChar),
     new OracleParameter(":PHONE", OracleType.NVarChar),
     new OracleParameter(":CARDID", OracleType.NVarChar),
     new OracleParameter(":REMARK", OracleType.NVarChar),
     new OracleParameter(":FLAG", OracleType.NChar)};
   parameters[0].Value = model.ID;
   parameters[1].Value = model.USERNAME;
   parameters[2].Value = model.PASSWORD;
   parameters[3].Value = model.CNAME;
   parameters[4].Value = model.SEX;
   parameters[5].Value = model.PHONE;
   parameters[6].Value = model.CARDID;
   parameters[7].Value = model.REMARK;
   parameters[8].Value = model.FLAG;

   OraHelper.ExecuteSql(strSql.ToString(),parameters);
  }

有理想的人的主页 有理想的人 | 初学一级 | 园豆:5
提问于:2012-12-26 17:22
< >
分享
最佳答案
0

你这是在说天书。

谁知道你生成的代码是什么样子?

谁知道究竟是数据库规定每个字段必须有值,还是代码规定每个字段必须有值?

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2012-12-26 17:27

数据库设置的可以为空   是代码生成的时候规定每个字段必须有值

有理想的人 | 园豆:5 (初学一级) | 2012-12-27 08:43

@有理想的人: 代码生成器是你自己写的,还是第三方提供的?很显然,如果你没法通过修改代码生成规则来允许字段为空的话,那么你就需要手动修改生成后的代码。一般来说,代码生成器不会添加约束规则,因此,最有可能的情况就是代码生成器在处理值类型数据的时候,没有使用可为空的值类型。

比如,数据库中可以设置整型(int)字段为 null,但是你的代码生成器生成的对应字段为 int 型,而非 Nullable<int> (或者写成 int? )型。

Launcher | 园豆:45045 (高人七级) | 2012-12-27 09:16

@Launcher: 现在我贴出了  生成的代码  请高人看一下  怎么改

有理想的人 | 园豆:5 (初学一级) | 2012-12-27 10:00

@有理想的人: 你贴的代码里,哪些字段不赋值,会提示错误?

Launcher | 园豆:45045 (高人七级) | 2012-12-27 10:06

@Launcher: 我做的时候  只要前三个赋值了  其他的没赋值 会提示 ORA-01008:并非所有变量都已绑定 这个错误

有理想的人 | 园豆:5 (初学一级) | 2012-12-27 10:11

@有理想的人: 你这种写法只能这样,parameters[6].Value = model.CARDID == null ? "":model.CARDID;

或者你得动态的拼接 insert,如果 model.CARDID == null ,insert 中就不要包括 CARDID,parameters 里也不要添加 CARDID。

Launcher | 园豆:45045 (高人七级) | 2012-12-27 10:58

@Launcher: 哦  好的 我试试

有理想的人 | 园豆:5 (初学一级) | 2012-12-27 11:10
其他回答(3)
0

你可以在数据库建立的表中,设置字段可null,或者是给字段一个默认值

chenping2008 | 园豆:9836 (大侠五级) | 2012-12-26 17:26
0

用EF把,你说的问题就不是问题了

Alvin | 园豆:828 (小虾三级) | 2012-12-26 20:04
0

确实有点像天书,呵呵。一楼方法可以试试

卒子 | 园豆:588 (小虾三级) | 2012-12-26 21:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册