Pregunta

Estoy intentando conectar con Sybase ASE 15 y llame a un SP que hace algo de LMD. Me preguntaba si alguien tiene alguna punteros a una clase análoga Sybase ayudante para SQLhelper.cs o si alguien tiene alguna punteros a cualquier código blog / muestra.

Con el tiempo me va a migrar a la solución de SQL Server 2008 R2 (un par de meses a partir de ahora), así que quiero crear una aplicación genérica que puede ser utilizado sin grandes cambios, incluso después de la migración.

¿Fue útil?

Solución

public class SybaseDBHelper : ISybaseDBHelper
    {
        private AseConnection conn;
        private AseCommand cmd;
        private AseDataAdapter adapter;
        private DataSet outDS;
        protected static readonly ILog _logger = LogManager.GetLogger(typeof (SybaseDBHelper));

        #region InsertData
        public int InsertDataUsingStoredProcedure(string storedProcedureName, DatabaseEnum dbName, List<AseParameter> parameters)
        {
            var connFactory = new ConnectionFactory();
            int _errorCode = 0;
            string connectionString = connFactory.GetConnectionString(dbName);
            using (conn = connFactory.GetAseConnectionString(connectionString))
            {
                try
                {
                    conn.Open();
                    if (conn.State == ConnectionState.Open)
                    {
                        using (cmd = conn.CreateCommand())
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.CommandText = storedProcedureName;
                            if (parameters != null )
                            {
                                foreach (AseParameter param in parameters)
                                {
                                    cmd.Parameters.Add(param);
                                }
                            }
                           _errorCode = cmd.ExecuteNonQuery();
                        }
                    }
                }
                catch (AseException ex)
                {
                    _logger.ErrorFormat("Error Inserting Data into Database {0}", ex);
                    throw;
                }
                finally
                {
                    conn.Close();
                }
            }
            return _errorCode;
        }

        #endregion

        #region IDisposable Members

        public void Dispose()
        {
            Dispose(true);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                conn.Dispose();
                conn = null;
                GC.SuppressFinalize(this);
            }
        }

        #endregion

} }

Interfaz

using System;
using System.Collections.Generic;
using System.Data;
using LiabilitiesMI.Common.DataObjects;
using Sybase.Data.AseClient;

namespace LiabilitiesMI.Common.Interfaces
{
    public interface ISybaseDBHelper : IDisposable
    {
        DataSet GetDataUsingStoredProcedure(string storedProcedureName, DatabaseEnum dbName, List<AseParameter> parameters);
        int InsertDataUsingStoredProcedure(string storedProcedureName, DatabaseEnum dbName, List<AseParameter> parameters);
    }
}

- Llamada de esta manera, se invocará la basura expliciti Colección

using (ISybaseDBHelper _DBHelper = ObjectFactory.GetDBHelper())
            {
                _DBHelper.InsertDataUsingStoredProcedure("usp_load_fx_spot_rate_into_staging", DatabaseEnum.Staging, input);
            }

Otros consejos

  1. Si está desarrollando SQL para Sybase (o MS) que es el mejor de utilizar una herramienta de desarrollo, tales como SQLProgrammer o Rapid SQL. Mejora la productividad al eliminar el trabajo manual.

  2. Si usted no tiene eso, entonces las utilidades que vienen con Sybase son bastante adecuado, pero hay que aprender a usar el catálogo. ISQL para una interfaz de carácter o dbisql que proporciona mando y ResultSet ventanas en una interfaz gráfica de usuario.

  3. Una vez que tenga una sesión abierta en el servidor, escriba los siguientes comandos SQL. Estos sistemas ejecutar procedimientos almacenados que interrogan el catálogo:

sp_help exec (object_name) - incluyendo tablas y procedimientos almacenados

exec sp_helptext

Hay 30 de estos interrogatorios.

Lo tomo se da cuenta de que sprocs pueden hacer mucho más que los insertos simples; manejar varios tipos de datos como parámetros, y que su código fijada esté solamente un ejemplo sencillo, no todos los tornillos. En general, para permitir procedimientos almacenados para la ejecución de aplicaciones Java, es necesario proporcionar una envoltura (en el lado de SQL).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top