Pergunta

Estou tentando me conectar ao Sybase ASE 15 e ligar para um SP que faz algum DML. Eu queria saber se alguém tem algum ponteiro para uma classe auxiliar Sybase análoga ao sqlhelper.cs ou se alguém tem alguma dica para qualquer blog / código de amostra.

Eventualmente, estarei migrando a solução para o SQL Server 2008 R2 (alguns meses daqui), então quero criar uma implementação genérica que possa ser usada sem muita alteração, mesmo após a migração.

Foi útil?

Solução

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

} }

Interface

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);
    }
}

-Calling Thal Way invocará a coleta explicita de lixo

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

Outras dicas

  1. Se você estiver desenvolvendo SQL para Sybase (ou MS), é melhor usar uma ferramenta de desenvolvedor, como SQLProgrmermer ou Rapid SQL. Melhora a produtividade, eliminando o trabalho manual.

  2. Se você não tem isso, os utilitários que acompanham o Sybase são bastante adequados, mas você precisa aprender a usar o catálogo. O ISQL para uma interface de caractere ou DBISQL que fornece Windows de comando e resultado em uma interface GUI.

  3. Depois de abrir uma sessão no servidor, digite os seguintes comandos SQL. Esses executam procedimentos armazenados do sistema que interrogam o catálogo:

EXEC SP_HELP (Object_Name) - incluindo tabelas e sproces

EXEC SP_HELPTEXT

Existem 30 desses interrogatórios.

Suponho que você perceba que os sprocs podem fazer muito mais do que inserções simples; Lidar com vários tipos de dados como parâmetros e que seu código publicado é apenas um exemplo simples, não o quid completo. Geralmente, para ativar os Procs armazenados para execução de aplicativos Java, precisamos fornecer um invólucro (no lado SQL).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top