本人用ASP.NET(C#)实现图片存储至oracle(8i)的blob数据类型中,用Microsoft OLE DB Provider 做连接。
表结构如下:pic_id(int),pic_description(blob),pic_info(blob)测试的时候,通过windows xp测试存储成功,而把代码放到windows 2000 server上面,经过编译后添加数据时则发生ora-01036的错误?经调试,其中pic_description字段内容存储成功,而pic_info字段的内容存储失败。同样的代码,同样的sql语句,同样的数据库,不同的环境导致了不同的结果!
急盼热心人提供解决方案!3x!

解决方案 »

  1.   

    ora-01036为illegal variable name/number 错误
      

  2.   

    private OleDbConnection objc;
    private string str=ConfigurationSettings.AppSettings["ORACLEConnectionString"];private string insertoper(byte[][] b,string sql)
    {
    Connect(); OleDbTransaction Tran;
    Tran=objc.BeginTransaction();

    try
    {
    OleDbCommand odb=new OleDbCommand(sql,objc);
    for(int i=0;i<b.Length;i++)
    {
    string paraname="imageData"+i;
    odb.Parameters.Add(paraname,OleDbType.Binary);
    odb.Parameters[paraname].Value=b[i];
    }
    odb.Transaction=Tran;
    odb.ExecuteNonQuery();/*==========这里报错=========*/
    Tran.Commit(); return "1";
    }
    catch(Exception ex)
    {
    Tran.Rollback();
    return ex.Message;
    }
    finally
    {
    Disconnect();
    } }
    private void Connect()
    {
    if(objc==null)
    objc=new OleDbConnection(str); if(objc.State==ConnectionState.Closed)
    objc.Open();
    } private void Disconnect()
    {
    objc.Close();
    }
      

  3.   

    oledbcommand 的paramname 不支持的,要用"?"作为参数名,
    用参数下标进行访问。不能用参数名!
    这个问题应该.net的遗憾和不足。
      

  4.   

    1.confirm your OS 's version 
    2.try another win2000
      

  5.   

    估计你Window 2000上的oracle odbc 驱动有问题,建议把oracle odbc升级到9.2.0.5.0以上。如果在这个版本之下,去找一下相关的patch.
      

  6.   

    1 参数名前面缺少“:”号会引起这个问题,这是由于使用OLE DB Provider时,对于参数名的检查比使用Oracle Provider更严格。所以建议在代码中做如下修改看能否解决问题:
    将string paraname="imageData"+i;
    改为:
    string paraname=":imageData"+i;
      

  7.   

    2 由于没有定义oledb command的类型,如果调用的是Oracle的存储过程的话,那么建议应该在oledb command定义后添加如下代码:
    oledbCmd.CommandType = CommandType.StoredProcedure;
      

  8.   

    谢谢redbb(....Dotneter....抵制日货,人人有责...),但按照你的方法修改后还是和先前结果一样