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);
}
你这是在说天书。
谁知道你生成的代码是什么样子?
谁知道究竟是数据库规定每个字段必须有值,还是代码规定每个字段必须有值?
数据库设置的可以为空 是代码生成的时候规定每个字段必须有值
@有理想的人: 代码生成器是你自己写的,还是第三方提供的?很显然,如果你没法通过修改代码生成规则来允许字段为空的话,那么你就需要手动修改生成后的代码。一般来说,代码生成器不会添加约束规则,因此,最有可能的情况就是代码生成器在处理值类型数据的时候,没有使用可为空的值类型。
比如,数据库中可以设置整型(int)字段为 null,但是你的代码生成器生成的对应字段为 int 型,而非 Nullable<int> (或者写成 int? )型。
@Launcher: 现在我贴出了 生成的代码 请高人看一下 怎么改
@有理想的人: 你贴的代码里,哪些字段不赋值,会提示错误?
@Launcher: 我做的时候 只要前三个赋值了 其他的没赋值 会提示 ORA-01008:并非所有变量都已绑定 这个错误
@有理想的人: 你这种写法只能这样,parameters[6].Value = model.CARDID == null ? "":model.CARDID;
或者你得动态的拼接 insert,如果 model.CARDID == null ,insert 中就不要包括 CARDID,parameters 里也不要添加 CARDID。
@Launcher: 哦 好的 我试试
你可以在数据库建立的表中,设置字段可null,或者是给字段一个默认值
用EF把,你说的问题就不是问题了
确实有点像天书,呵呵。一楼方法可以试试