Autor
|
Tema: Ayuda con Programa C# Conexion a Oracle (Leído 4,649 veces)
|
trukologo
Desconectado
Mensajes: 2
|
Estimados: este es mi primer post y es para pedir ayuda con un programa que no me funca y ya lo he revisado mil veces y no se por que, les cuento es un programa para insertar clientes en una tabla con distintos datos, la conexion me funciona para la tratar de insertar los datos me genera el error "ORA-00936: missing expression", este es el codigo: public static bool Guardar(Cliente _cliente) { try { Conexion conexion = new Conexion(); OracleConnection sqlConnection = conexion.Conectar(); if (sqlConnection != null) { OracleCommand comando = sqlConnection.CreateCommand(); comando.CommandText = @"INSERT INTO VALIDACION(Empresa, FechaEnvio, Fecha, Cuenta, FonoContacto, CuotasPorVencer, CuotasVencidas, MontoDeuda, ValorCuotas, MontoCapital, MontoInteres, MontoReprogramar, NumeroCuotas, ValorNuevaCuota, PrimerVcto, TasaInteres, CuotaDiferidad, EjecutivoExterno, TramoProvision, Producto, TipoCartera, Ejecutivo, EstadoRep, MotivoRechazo, Correo, NuevoTelefono, NuevaDireccion, Observacion, RebajadoEnTC, Modificacion, Codigo, Supervisor, Ite, ValorRescate) VALUES(@Empresa, @FechaEnvio, @Fecha, @Cuenta, @FonoContacto, @CuotasPorVencer, @CuotasVencidas, @MontoDeuda, @ValorCuotas, @MontoCapital, @MontoInteres, @MontoReprogramar, @NumeroCuotas, @ValorNuevaCuota, @PrimerVcto, @TasaInteres, @CuotaDiferidad, @EjecutivoExterno, @TramoProvision, @Producto, @TipoCartera, @Ejecutivo, @EstadoRep, @MotivoRechazo, @Correo, @NuevoTelefono, @NuevaDireccion, @Observacion, @RebajadoEnTC, @Modificacion, @Codigo, @Supervisor, @Ite, @ValorRescate)"; comando.CommandType = CommandType.Text; comando.Parameters.Add("@Empresa",_cliente.Empresa); comando.Parameters.Add("@FechaEnvio",_cliente.FechaEnvio); comando.Parameters.Add("@Fecha",_cliente.Fecha); comando.Parameters.Add("@Cuenta",_cliente.Cuenta); comando.Parameters.Add("@FonoContacto",_cliente.FonoContacto); comando.Parameters.Add("@CuotasPorVencer",_cliente.CuotasPorVencer); comando.Parameters.Add("@CuotasVencidas",_cliente.CuotasVencidas); comando.Parameters.Add("@MontoDeuda",_cliente.MontoDeuda); comando.Parameters.Add("@ValorCuotas",_cliente.ValorCuotas); comando.Parameters.Add("@MontoCapital",_cliente.MontoCapital); comando.Parameters.Add("@MontoReprogramar",_cliente.MontoReprogramar); comando.Parameters.Add("@NumeroCuotas",_cliente.NumeroCuotas); comando.Parameters.Add("@ValorNuevaCuota",_cliente.ValorNuevaCuota); comando.Parameters.Add("@PrimerVcto",_cliente.PrimerVcto); comando.Parameters.Add("@TasaInteres",_cliente.TasaInteres); comando.Parameters.Add("@CuotaDiferidad",_cliente.CuotaDiferidad); comando.Parameters.Add("@EjecutivoExterno",_cliente.EjecutivoExterno); comando.Parameters.Add("@TramoProvision",_cliente.TramoProvision); comando.Parameters.Add("@Producto",_cliente.Producto); comando.Parameters.Add("@TipoCartera",_cliente.TipoCartera); comando.Parameters.Add("@Ejecutivo",_cliente.Ejecutivo); comando.Parameters.Add("@EstadoRep",_cliente.EstadoRep); comando.Parameters.Add("@MotivoRechazo",_cliente.MotivoRechazo); comando.Parameters.Add("@Correo",_cliente.Correo); comando.Parameters.Add("@NuevoTelefono",_cliente.NuevoTelefono); comando.Parameters.Add("@NuevaDireccion",_cliente.NuevaDireccion); comando.Parameters.Add("@Observacion",_cliente.Observacion); comando.Parameters.Add("@RebajadoEnTC",_cliente.RebajadoEnTC); comando.Parameters.Add("@Modificacion",_cliente.Modificacion); comando.Parameters.Add("@Codigo",_cliente.Codigo); comando.Parameters.Add("@Supervisor",_cliente.Supervisor); comando.Parameters.Add("@Ite",_cliente.Ite); comando.Parameters.Add("@ValorRescate",_cliente.ValorRescate); comando.ExecuteNonQuery(); conexion.Close(); return true; } return false; } catch (Exception) { return false; } }
si me pueden ayudar, gracias.
|
|
|
En línea
|
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
es recomendable que crees el store procedure en la base de datos.
|
|
|
En línea
|
a por las buenas ideas
|
|
|
trukologo
Desconectado
Mensajes: 2
|
es recomendable que crees el store procedure en la base de datos.
si tiene procedimiento de almacenado, pero lo yo trato de hacer es insertar los datos que obtengo del programa (vía windows forms). de hecho modifique el programa y me sale lo mismo: public static bool Guardar(Cliente _cliente) { try { Conexion conexion = new Conexion (); OracleConnection sqlConnection = conexion.Conectar(); if (sqlConnection != null) { OracleCommand comando = sqlConnection.CreateCommand(); comando.CommandText = @"INSERT INTO VALIDACION (EMPRESA,FECHAENVIO, FECHA, CUENTA, FONOCONTACTO, CUOTASPORVENCER, CUOTASVENCIDAS, MONTODEUDA, VALORCUOTAS, MONTOCAPITAL, MONTOINTERES, MONTOREPROGRAMAR, NUMEROCUOTAS, VALORNUEVACUOTA, PRIMERVCTO, TASAINTERES, CUOTADIFERIDAD, EJECUTIVOEXTERNO, TRAMOPROVISION, PRODUCTO, TIPOCARTERA, EJECUTIVO, ESTADOREP, MOTIVORECHAZO, CORREO, NUEVOTELEFONO, NUEVADIRECCION, OBSERVACION, REBAJADOENTC, MODIFICACION, CODIGO, SUPERVISOR, ITE, VALORRESCATE) VALUES(" + _cliente.Empresa + "','" + _cliente.FechaEnvio + "','" + _cliente.Fecha + "','" + _cliente.Cuenta + "','" + _cliente.FonoContacto + "','" + _cliente.CuotasPorVencer + "','" + _cliente.CuotasVencidas + "','" + _cliente.MontoDeuda + "','" + _cliente.ValorCuotas + "','" + _cliente.MontoCapital + "','" + _cliente.MontoInteres + "','" + _cliente.MontoReprogramar + "','" + _cliente.NumeroCuotas + "','" + _cliente.ValorNuevaCuota + "','" + _cliente.PrimerVcto + "','" + _cliente.TasaInteres + "','" + _cliente.CuotaDiferidad + "','" + _cliente.EjecutivoExterno + "','" + _cliente.TramoProvision + "','" + _cliente.Producto + "','" + _cliente.TipoCartera + "','" + _cliente.Ejecutivo + "','" + _cliente.EstadoRep + "','" + _cliente.MotivoRechazo + "','" + _cliente.Correo + "','" + _cliente.NuevoTelefono + "','" + _cliente.NuevaDireccion + "','" + _cliente.Observacion + "','" + _cliente.RebajadoEnTC + "','" + _cliente.Modificacion + "','" + _cliente.Codigo + "','" + _cliente.Supervisor + "','" + _cliente.Ite + "','" + _cliente.ValorRescate + "')"; comando.ExecuteNonQuery(); conexion.Close(); return true; } return false; } catch (Exception) { return false; } }
|
|
« Última modificación: 20 Julio 2012, 21:32 pm por trukologo »
|
En línea
|
|
|
|
.::IT::.
Desconectado
Mensajes: 167
|
Primero que nada debes bajarte el conector de Oracle para .net desde : http://www.oracle.com/technetwork/topics/dotnet/index-085163.htmlYa que el de Windows ya esta algo viejo mirar: http://msdn.microsoft.com/es-es/library/77d8yct7%28v=vs.110%29.aspxsegún eso dice: The types in System.Data.OracleClient are deprecated. The types are supported in version 4 of the .NET Framework but will be removed in a future release. Microsoft recommends that you use a third-party Oracle provider. Ahora el motivo de tu error es que en lugar de "@" para los parametros se usa los ":" ejemplo: String commandString = "INSERT INTO Users (Name, Desk, UpdateTime) VALUES (:Name, :Desk, :UpdateTime)"; USING (OracleCommand command = NEW OracleCommand(commandString, _connection, _transaction)) { command.Parameters.ADD("Name", OracleType.VARCHAR, 50).VALUE = strategy; command.Parameters.ADD("Desk", OracleType.VARCHAR, 50).VALUE = deskName ?? OracleString.NULL; command.Parameters.ADD("UpdateTime", OracleType.DateTime).VALUE = updated; command.ExecuteNonQuery(); }
El ejemplo fue sacado de http://stackoverflow.com/questions/343299/bulk-insert-to-oracle-using-netAhora la forma que recomiendo seria que crees un packete y dentro pongas los procedimientos almacenados un ejemplo con un pequeña tabla que hice. -- Creamos la tabla CREATE TABLE clientes ( idcliente INTEGER NOT NULL, nombre VARCHAR2(100)NOT NULL, fecha_registro DATE NOT NULL, CONSTRAINT pk_departamentos PRIMARY KEY(idcliente) ); / -- Creamos el packete y definimos los procedimientos-funciones etc. CREATE OR REPLACE PACKAGE pk_clientes IS TYPE t_cursor IS REF CURSOR; PROCEDURE sp_registra( p_nombre VARCHAR2, p_fecha_registro DATE ); PROCEDURE sp_actualiza( p_idcliente INTEGER, p_nombre VARCHAR2, p_fecha_registro DATE ); PROCEDURE sp_get_lista( p_resul OUT t_cursor ); PROCEDURE sp_get_info_cliente( p_idcliente INTEGER, p_resul OUT t_cursor ); END pk_clientes; / -- Creamos el cuerpo del packete aqui se implementa los procedimientos-funciones etc. CREATE OR REPLACE PACKAGE BODY pk_clientes IS --Procedimiento para Registrar PROCEDURE sp_registra( p_nombre VARCHAR2, p_fecha_registro DATE ) IS BEGIN INSERT INTO clientes( nombre, fecha_registro )VALUES( p_nombre, p_fecha_registro ); COMMIT; END; --Procedimiento para Actualizar PROCEDURE sp_actualiza( p_idcliente INTEGER, p_nombre VARCHAR2, p_fecha_registro DATE ) IS BEGIN UPDATE clientes SET nombre=p_nombre, fecha_registro=p_fecha_registro WHERE idcliente=p_idcliente; COMMIT; END; --Procedimiento para Listar PROCEDURE sp_get_lista( p_resul OUT t_cursor ) IS BEGIN OPEN p_resul FOR SELECT idcliente, nombre, fecha_registro FROM clientes; END; --Procedimiento para Informacion de un cliente PROCEDURE sp_get_info_cliente( p_idcliente INTEGER, p_resul OUT t_cursor ) IS BEGIN OPEN p_resul FOR SELECT idcliente, nombre, fecha_registro FROM clientes WHERE idcliente=p_idcliente; END; END pk_clientes; / -- Secuencia para hacer el campo idcliente autonumerico CREATE SEQUENCE seq_cliente; / CREATE OR REPLACE TRIGGER tr_seq_cliente BEFORE INSERT ON clientes FOR EACH ROW BEGIN SELECT seq_cliente.NEXTVAL INTO :NEW.idcliente FROM dual; END;
Como podras fijarte eh creado un packete con todas las funciones que necesito para hacer mantenimiento a la tabla clientes. bueno para llamarlo desde .net asumiento que tengo una clase oCliente con propiedades idcliente,nombre,fecha_registro y quiero invocar al procedimiento sp_registra seria asi: public static void RegistrarCliente(oCliente info) { using (OracleConnection oCn = new OracleConnection(App.GetStrConnection())) { string proc = string.Empty; proc = "pk_clientes.sp_registra"; OracleCommand oCmd = new OracleCommand(proc, oCn); oCmd.CommandType = CommandType.StoredProcedure; oCmd.Parameters.Add(new OracleParameter("p_nombre", OracleDbType.Varchar2)).Value = info.nombre; oCmd.Parameters.Add(new OracleParameter("p_fecha_registro", OracleDbType.Date)).Value = info.fecha_registro; oCn.Open(); try { oCmd.ExecuteNonQuery(); } catch (Exception ex) { throw new Exception(ex.Message, ex); } } }
Bueno para no hacerlo mas largo te adjunto un pequeño proyecto que hice donde muestro mas detallado la invocacion de cada procedimiento del packete creado. https://rapidshare.com/files/907284720/TestOracle.zipPara correrlo pues debes editar la cadena de conexion de App.config y claro ejecutar el script SQL de lineas arriba!!
|
|
« Última modificación: 26 Julio 2012, 23:00 pm por .::IT::. »
|
En línea
|
Simplemente .::IT::.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Erro con conexión ORACLE
.NET (C#, VB.NET, ASP)
|
DelKoS
|
1
|
2,008
|
23 Noviembre 2006, 15:05 pm
por DelKoS
|
|
|
Conexion de Oracle a vb.net
.NET (C#, VB.NET, ASP)
|
wili342
|
2
|
2,838
|
15 Diciembre 2006, 08:30 am
por BADBYTE-K
|
|
|
conexion a oracle express
.NET (C#, VB.NET, ASP)
|
alex1331
|
1
|
3,066
|
25 Febrero 2008, 15:13 pm
por elmaro
|
|
|
[Duda]Conexión a base de datos Oracle
Hacking
|
nacho87
|
1
|
2,910
|
15 Agosto 2012, 06:26 am
por atxdz18
|
|
|
Conexion con Oracle
Programación Visual Basic
|
DragonsWP
|
1
|
2,070
|
26 Abril 2010, 02:57 am
por BlackZeroX
|
|