Question

Je suis en train de se connecter à sybase ASE 15 et appeler un SP qui fait un peu DML. Je me demandais si quelqu'un a des pointeurs vers une classe d'aide sybase analogues à SQLhelper.cs ou si quelqu'un a des pointeurs vers un code blog / échantillon.

Finalement, je migreront la solution à SQL Server 2008 R2 (deux mois à partir de maintenant), je veux créer une implémentation générique qui peut être utilisé sans beaucoup de changement, même après la migration.

Était-ce utile?

La solution

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

- L'appeler ainsi invoquera la collecte des ordures expliciti

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

Autres conseils

  1. Si vous développez SQL pour Sybase (ou MS) vous êtes mieux loti en utilisant un outil de développement, tels que SQLProgrammer ou Rapid SQL. Il améliore la productivité en éliminant le travail manuel.

  2. Si vous ne l'avez pas, alors les services qui viennent avec Sybase sont tout à fait adéquate, mais vous devez apprendre à utiliser le catalogue. ISQL pour une interface de caractères ou dbisql qui fournit des commandes et des fenêtres ResultSet dans une interface graphique.

  3. Une fois que vous avez une session ouverte sur le serveur, tapez les commandes SQL suivantes. Ces exécutent des procédures stockées système qui questionnent le catalogue:

exec sp_help (object_name) - y compris les tableaux et sprocs

exec sp_helptext

Il y a 30 Ces demandes de renseignements.

Je suppose que vous réalisez que sprocs peut faire beaucoup plus que INSERTS simples; gérer différents types de données en tant que paramètres, et que votre code affiché est seulement un exemple simple, pas le plein quid. En général, pour permettre l'exécution de procédures stockées à partir d'applications Java, nous avons besoin de fournir une enveloppe (sur le côté SQL).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top