2010-08-31 11 views
0

J'essaie de me connecter à sybase ASE 15 et d'appeler un SP qui fait du DML. Je me demandais si quelqu'un avait des pointeurs vers une classe auxiliaire sybase analogue à SQLhelper.cs ou si quelqu'un avait des pointeurs vers n'importe quel code de blog/exemple. Finalement, je migrerai la solution vers SQl Server 2008 R2 (quelques mois à partir de maintenant), donc je veux créer une implémentation générique qui peut être utilisée sans beaucoup de changement même après la migration.Classe SybaseHelper?

+0

Enfin, j'ai réussi à écrire mon propre DBHelper.cs qui va aller à l'un de mes blogs. Je posterai le lien bientôt. – Ash

Répondre

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

il --Calling cette façon invoquera la poubelle expliciti Collection

using (ISybaseDBHelper _DBHelper = ObjectFactory.GetDBHelper()) 
      { 
       _DBHelper.InsertDataUsingStoredProcedure("usp_load_fx_spot_rate_into_staging", DatabaseEnum.Staging, input); 
      } 
0
  1. Si vous développez SQL pour Sybase (ou MS) il vaut mieux utiliser un outil Developer, tel que SQLProgrammer ou Rapid SQL. Il améliore la productivité en éliminant le travail manuel. Si ce n'est pas le cas, les utilitaires fournis avec Sybase sont tout à fait adéquats, mais vous devez apprendre à utiliser le catalogue. Soit isql pour une interface de caractères ou DBISQL qui fournit des fenêtres Command et ResultSet dans une interface graphique.

  2. Une fois qu'une session est 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 (nom_objet) - y compris les tables et sprocs

exec sp_helptext

Il y a 30 Ces demandes de renseignements. Je suppose que vous vous rendez compte que les sprocs peuvent faire beaucoup plus que de simples INSERTS; gérer différents types de données en tant que paramètres, et que votre code posté est seulement un exemple simple, pas le quid complet. Généralement, pour activer les procs stockés pour l'exécution à partir d'applications Java, nous devons fournir un wrapper (du côté SQL).

+0

Je parlais d'une classe d'assistance C# pour appeler les SP à partir d'une application. SQLHelper.cs est une classe de C# et pratique pour microsoft et j'essayais de trouver quelque chose d'analogue pour sybase mais j'ai fini par écrire le mien. – Ash

+1

Je sais tout cela. Je n'ai pas de problème avec votre classe. Je vous ai donné des conseils spécifiques qui amélioreront votre productivité, tout à fait à part; et qui réduira votre confiance en cela. Vous avez vraiment besoin de connaître les alternatives, et de faire un choix éclairé (pour chaque besoin fonctionnel), plutôt que de n'avoir qu'un seul moyen d'exécuter tous les besoins fonctionnels. – PerformanceDBA