Supongamos que uno quiere hacer la siguiente consulta:
SELECT * FROM Countries WHERE Country_id = :c_id
Si usamos el siguiente código, la aplicacion generará una excepcion por tener un parametro de tipo string con longitud 0:
using (IDbConnection conn = new OracleConnection("Password=hr;Persist Security Info=True;User ID=hr;Data Source=localhost")){
conn.Open();
using (IDbCommand command = conn.CreateCommand())
{
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM Countries WHERE Country_id = :c_id";
IDbDataParameter param = command.CreateParameter();
param.ParameterName = "c_id";
param.DbType = DbType.AnsiStringFixedLength;
param.Value = String.Empty;
command.Parameters.Add(param);
using (IDataReader reader = command.ExecuteReader())
{
DumpReader(reader);
}
}
conn.Close();
}
El error es: Parameter 'c_id': No size set for variable length data type: String.
Para solucionar esto tenemos dos opciones:
1. Usar la librería provista por Oracle para .NET para acceder a los datos. Esta librería maneja de forma correcta los Strings vacios. (al menos es asi usando la última version de la librería. Me falta confirmar que con versiones anteriores tambien funcione)
2. Enviar DbNull.Value como valor del parametro, en vez de String.Empty. En otro blog leí que Oracle maneja de la misma manera tanto a los strings vacíos como a los NULL. Sin embargo yo no estoy 100% seguro de que esto sea asi, asi que de tener confirmación o refutación de esto, por favor haganmelo saber! De todas maneras, mi recomendación es usar ODP.Net
Hasta la próxima!
Z
No hay comentarios.:
Publicar un comentario