我有一个页面,上传附件时就报错,不上传附件时一切正常,
我原来用的是oracle 92,一点问题都没有,后来发现用户装的是oracle8.1.7,
我换到8.1.7后就出现下列问题,
上传附件报错  ORA-12571: TNS:packet writer failure 
刷新页面 出现 ORA-03114: not connected to ORACLE 
再刷新又一切正常,连上数据库。 String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageSize,ImageName,lx) VALUES (?, ?, ?,?,'" + lx.ToString() + "')";
                OleDbCommand CmdObj = new OleDbCommand(SqlCmd, zy.Data.Sql.Connection);//zy.Data.Sql.Connection  数据连接 封装的类
                CmdObj.Parameters.Add(":ImageData", OleDbType.Binary, FileLength).Value = FileByteArray;
                CmdObj.Parameters.Add(":ImageContentType", OleDbType.VarChar, 100).Value = UpFile.ContentType;
                //记录文件长度,读取时使用
                  CmdObj.Parameters.Add(":ImageSize", OleDbType.VarChar, 255).Value = UpFile.ContentLength;
                string c = UpFile.FileName;
                string name = Path.GetFileName(c);
                CmdObj.Parameters.Add(":ImageName", OleDbType.VarChar, 255).Value = name;
                CmdObj.ExecuteNonQuery();
代码92下测试没有问题

解决方案 »

  1.   


    INSERT INTO ImageStore (ImageData, ImageContentType, ImageSize,ImageName,lx) VALUES (?, ?, ?,?,'" + lx.ToString() + "')";
                    OleDbCommand CmdObj = new OleDbCommand(SqlCmd, zy.Data.Sql.Connection);//
    语句放到oracle8.1.7中的SqlPlus中执行一下。
    能否插入?
      

  2.   


    出现新问题,我把OleDb换成OracleOracleConnection Con = new OracleConnection("Data Source=gdxt;User Id=gdxt;Password=gdxt;");
                    String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageSize,ImageName,lx) VALUES (?, ?, ?,?,'" + lx.ToString() + "')";
                    OracleCommand CmdObj = new OracleCommand(SqlCmd,Con);
                    CmdObj.Parameters.Add("ImageData", OracleType.Blob, FileLength).Value = FileByteArray;
                    CmdObj.Parameters.Add("ImageContentType", OracleType.VarChar, 100).Value = UpFile.ContentType;
                    //记录文件长度,读取时使用
                    CmdObj.Parameters.Add("ImageSize", OracleType.VarChar, 255).Value = UpFile.ContentLength;
                    string c = UpFile.FileName;
                    string name = Path.GetFileName(c);
                    CmdObj.Parameters.Add("ImageName", OracleType.VarChar, 255).Value = name;
                    Con.Open();             
                    CmdObj.ExecuteNonQuery();出现  ORA-01036: 非法的变量名/编号\n  错误
      

  3.   

    搞定了。晕死,原来是System.Data.OleDb和System.Data.OracleClient两种方式各有各的优缺点。 OracleConnection Con = new OracleConnection("Data Source=gdxt;User Id=gdxt;Password=gdxt;");
                    String SqlCmd = "INSERT INTO ImageStore (ImageData, ImageContentType, ImageSize,ImageName,lx) VALUES (:ImageData,:ImageContentType,:ImageSize,:ImageName,'" + lx.ToString() + "')";
                    OracleCommand CmdObj = new OracleCommand(SqlCmd,Con);
                    CmdObj.Parameters.Add(":ImageData", OracleType.Blob, FileLength).Value = FileByteArray;
                    CmdObj.Parameters.Add(":ImageContentType", OracleType.VarChar, 100).Value = UpFile.ContentType;
                    //记录文件长度,读取时使用
                    CmdObj.Parameters.Add(":ImageSize", OracleType.VarChar, 255).Value = UpFile.ContentLength;
                    string c = UpFile.FileName;
                    string name = Path.GetFileName(c);
                    CmdObj.Parameters.Add(":ImageName", OracleType.VarChar, 255).Value = name;
                    Con.Open();             
                    CmdObj.ExecuteNonQuery();
    换成这个就好了,但是OracleConnection 连接数据库时不能指定数据提供者的驱动,唉,遗憾啊,所以其他的数据连接还是用OleDbConnection