Classe SybaseHelper?
-
25-09-2019 - |
Domanda
Sto cercando di connettersi a Sybase ASE 15 e chiamare un SP che fa qualche DML. Mi chiedevo se qualcuno ha qualche puntatori a una classe analoga Sybase supporto per SQLhelper.cs o se qualcuno ha qualche puntatori a qualsiasi codice di blog / campione.
Alla fine sarò migrando la soluzione a SQL Server 2008 R2 (paio di mesi da oggi) quindi voglio creare un'implementazione generica che può essere utilizzato senza cambiare molto, anche dopo la migrazione.
Soluzione
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
} }
Interfaccia
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);
}
}
- chiamata in questo modo richiamerà la spazzatura expliciti Collection
using (ISybaseDBHelper _DBHelper = ObjectFactory.GetDBHelper())
{
_DBHelper.InsertDataUsingStoredProcedure("usp_load_fx_spot_rate_into_staging", DatabaseEnum.Staging, input);
}
Altri suggerimenti
-
Se si sta sviluppando SQL per Sybase (o MS) si sta meglio fuori usando uno strumento di sviluppo, come ad esempio SQLProgrammer o Rapid SQL. Migliora la produttività eliminando il lavoro manuale.
-
Se non si dispone di questo, allora le utilità che vengono con Sybase sono abbastanza adeguata, ma è necessario imparare ad usare il catalogo. ISQL per un'interfaccia carattere o DBISQL che fornisce finestre di comando e di ResultSet in un'interfaccia grafica.
-
Una volta che avete un aperto sessione sul server, digitare i seguenti comandi SQL. Questi sistema di eseguire le stored procedure, che interroga il catalogo:
sp_help exec (nome_oggetto) - incluse le tabelle e le sprocs
exec sp_helptext
Ci sono 30 tali interrogatori.
Io lo prendo ti rendi conto che sprocs possono fare molto di più di semplici INSERTI; gestire vari tipi di dati come parametri, e che il codice inviato è soltanto un semplice esempio, non il quid completo. In generale, per consentire stored procedure per l'esecuzione di applicazioni Java, abbiamo bisogno di fornire un wrapper (sul lato SQL).