首页 新闻 搜索 专区 学院

向oracle中插入数据时提示“ORA-01008: 并非所有变量都已绑定”

0
悬赏园豆:50 [已解决问题] 解决于 2017-01-23 15:45

要插入的表结构是:除了主键外,其他属性均可为空。

插入方法:

public bool Insert(MMember mMember)
  {
            string sqlText = "Insert Into MemberS (MemberID,MemberName,Sex,company,Mobile,Phone,Fax,Address,MemberType,PayType,BankCard,BankName,Memo,BankTime)"
              + " Values(:MemberID,:MemberName,:Sex,:Company,:Mobile,:Phone,:Fax,:Address,:MemberType,:PayType,:BankCard,:BankName,:Memo,:BankTime)";
            OracleParameter[] parms = new OracleParameter[]
   {
      new OracleParameter("MemberID", OracleType.VarChar),
      new OracleParameter("MemberName", OracleType.NVarChar),
      new OracleParameter("Sex", OracleType.NVarChar),
      new OracleParameter("Company", OracleType.NVarChar),
      new OracleParameter("Mobile", OracleType.VarChar),
      new OracleParameter("Phone", OracleType.VarChar),
      new OracleParameter("Fax", OracleType.VarChar),
      new OracleParameter("Address", OracleType.NVarChar),
      new OracleParameter("MemberType", OracleType.NVarChar),
      new OracleParameter("PayType", OracleType.NVarChar),
      new OracleParameter("BankCard", OracleType.VarChar),
      new OracleParameter("BankName", OracleType.NVarChar),
      new OracleParameter("Memo", OracleType.NVarChar),
      new OracleParameter("BankTime", OracleType.Timestamp)
   };
   parms[0].Value = mMember.MemberID;
   parms[1].Value = mMember.MemberName;
   parms[2].Value = mMember.Sex;
   parms[3].Value = mMember.Company;
   parms[4].Value = mMember.Mobile;
   parms[5].Value = mMember.Phone;
   parms[6].Value = mMember.Fax;
   parms[7].Value = mMember.Address;
   parms[8].Value = mMember.MemberType;
   parms[9].Value = mMember.PayType;
   parms[10].Value = mMember.BankCard;
   parms[11].Value = mMember.BankName;
   parms[12].Value = mMember.Memo;
   if (string.IsNullOrEmpty(mMember.BankCard))
   {
                parms[13].Value = null;
   }
   else
   {
    parms[13].Value = DateTime.Now;
   }

   CacheUtility.RemoveCache(0, "Members");
   int rowsAffected = 0;
   try
   {
    rowsAffected = OracleHelper.ExecuteNonQuery(OracleHelper.Connection_String, CommandType.Text, sqlText, parms);//执行语句
   }
   catch (Exception ex)
   {
    return false;
   }
   return rowsAffected > 0;
  }

调用的时候只对 MemberID = memId,
                MemberName=memName,
                Phone=memPhone,
                Mobile=memMobile,
                MDate=DateTime.Now这五个属性进行了赋值,其他的没赋值。

按说其他属性允许为空的,插入的时候为什么还提示“ORA-01008: 并非所有变量都已绑定”??

Alec-Yin的主页 Alec-Yin | 初学一级 | 园豆:188
提问于:2011-08-15 11:55
< >
分享
最佳答案
0

在对象引用类型的属性没有赋值的情况下,值为 null
将 null 赋予参数对象的 value 属性,相当于没有赋值,所以 Oracle 报 ORA-01008: 并非所有变量都已绑定
对于准备赋予数据库 null 的参数应该明确赋予 DBNull

收获园豆:50
冠军 | 小虾三级 |园豆:886 | 2011-08-16 15:18
还是不行,把DBNull.value赋给变量还是会出错。我的方法是:如果为null则把“”赋给这个它,这样就可以了。
Alec-Yin | 园豆:188 (初学一级) | 2011-08-19 12:21
赋予空串与 NULL 的含义是不一样的。
你赋的这几个中,是否也有参数的值为 null 呢?
比较可靠的方式是在赋值之后遍历一下所有的参数,如果 Value 还是 null 的话,最后再重新赋予 DBNull.Value.

你还是应该检查一下是否少赋了值。
冠军 | 园豆:886 (小虾三级) | 2011-08-19 20:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册