Hello,
I've seen that your have commited an optimization in exception handling in mini... Fri Sept 30...
I've found a very very nasty bug...

Try this test case :

// project created on 03/10/2005 at 11:30
using System;
using System.Data;
using System.Data.OracleClient;


class MainClass
{



  private static void CreateDummy()
  {
   IDbConnection sqlCon = new OracleConnection("user id=hubert;data source=10.69.100.181:1521/ORALINUX;password=cosmic");
   IDbCommand command = sqlCon.CreateCommand();
   command.Connection = sqlCon;
   sqlCon.Open();
   command.CommandText =
    @" DROP TABLE INTRA_LANGUE CASCADE CONSTRAINTS";
    try{
   command.ExecuteNonQuery();
   }catch(Exception e)
   {}
   command.CommandText =
    @" CREATE TABLE INTRA_LANGUE (LANGUE_CODE VARCHAR2(40) NOT NULL,LANGUE VARCHAR2(100), CONSTRAINT PK_INTRA_LANGUE PRIMARY KEY (LANGUE_CODE))";
   command.ExecuteNonQuery();
   sqlCon.Close();
  }

public void checkexception(Exception e, IDbCommand command, string stack)
{
//Console.WriteLine(e.GetType().ToString());
try
{
throw e;
}
catch (OracleException ee)
{
Console.WriteLine("OracleException :::"+ee.Message);
Console.WriteLine("Command text :"+command.CommandText);
foreach (IDataParameter param in command.Parameters)
{
Console.WriteLine(param.ParameterName);
Console.WriteLine(param.Value.ToString());
}

}
}

  public void Test()
  {
   IDbCommand command=new OracleCommand();
   try
   {
   NSUniDataAccess.UniDataAccess.SetDb("Oracle");
   IDbConnection sqlCon = NSUniDataAccess.UniDataAccess.GetConnection("user id=hubert;data source=10.69.100.181:1521/ORALINUX;password=cosmic");
   command = sqlCon.CreateCommand();
   command.Connection = sqlCon;
   sqlCon.Open();
OracleParameter p1 = new OracleParameter("param1",OracleType.VarChar);
p1.Value = "en";
OracleParameter p2 = new OracleParameter("param2",OracleType.VarChar);
p2.Value = "english";
command.Parameters.Add(p1);
command.Parameters.Add(p2);
   command.CommandText =
    @" INSERT INTO INTRA_LANGUE (LANGUE_CODE,LANGUE) VALUES(:param1,:param2)";
   command.ExecuteNonQuery();
   command.CommandText =
    @" INSERT INTO INTRA_LANGUE (LANGUE_CODE,LANGUE) VALUES(:param1,:param2)";
   // Should throw a Unique constraint exception...
   command.ExecuteNonQuery();
   sqlCon.Close();
   }
   catch(Exception e)
   {
Console.WriteLine("oops : execption");
    checkexception(e,command,e.StackTrace);
   }
   return;
  }
public static void Main(string[] args)
{
CreateDummy();
Console.WriteLine("Hello World!");
MainClass monprog=new MainClass();
monprog.Test();
}
}

With the last svn revision : i got as a result of this program:

Hello World!
oops : execption
OracleException :::ORA-00001: unique constraint (HUBERT.PK_INTRA_LANGUE) violated

Command text : INSERT INTO INTRA_LANGUE (LANGUE_CODE,LANGUE) VALUES(:param1,:param2)
param1
en

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object
in [0x0006b] (at /home/hubert/Projects/ExceptionBug/Main.cs:47) MainClass:checkexception (System.Exception e, IDbCommand command, System.String stack)
in [0x000bf] (at /home/hubert/Projects/ExceptionBug/Main.cs:79) MainClass:Test ()
in [0x00016] (at /home/hubert/Projects/ExceptionBug/Main.cs:88) MainClass:Main (System.String[] args)

If I revert your changes : I get :
Hello World!
oops : execption
System.Data.OracleClient.OracleException
OracleException :::ORA-00001: unique constraint (HUBERT.PK_INTRA_LANGUE) violated

Command text : INSERT INTO INTRA_LANGUE (LANGUE_CODE,LANGUE) VALUES(:param1,:param2)
param1
en
param2
english


I dont't know exactly what's the underlying problem, but I know that this regression is caused by your commit...

Thanks... _______________________________________________
Ce message et les �ventuels documents joints peuvent contenir des informations confidentielles.
Au cas o� il ne vous serait pas destin�, nous vous remercions de bien vouloir le supprimer et en aviser imm�diatement l'exp�diteur. Toute utilisation de ce message non conforme � sa destination, toute diffusion ou publication, totale ou partielle et quel qu'en soit le moyen est formellement interdite.
Les communications sur internet n'�tant pas s�curis�es, l'int�grit� de ce message n'est pas assur�e et la soci�t� �mettrice ne peut �tre tenue pour responsable de son contenu.
_______________________________________________
Mono-devel-list mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to