Класс SybaseHelper? - PullRequest
       4

Класс SybaseHelper?

0 голосов
/ 31 августа 2010

Я пытаюсь подключиться к sybase ASE 15 и вызвать SP, который выполняет DML.Мне было интересно, есть ли у кого-нибудь какие-либо указатели на вспомогательный класс sybase, аналогичный SQLhelper.cs, или у кого-то есть какие-либо указатели на какой-либо блог / пример кода.

В конечном итоге я перенесу решение на SQl Server 2008 R2 (через пару месяцев), поэтому я хочу создать общую реализацию, которую можно использовать без особых изменений даже после миграции.

Ответы [ 2 ]

1 голос
/ 12 сентября 2010
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

}}

Интерфейс

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

- вызов этого пути вызовет явную сборку мусора

using (ISybaseDBHelper _DBHelper = ObjectFactory.GetDBHelper())
            {
                _DBHelper.InsertDataUsingStoredProcedure("usp_load_fx_spot_rate_into_staging", DatabaseEnum.Staging, input);
            }
0 голосов
/ 23 октября 2010
  1. Если вы разрабатываете SQL для Sybase (или MS), лучше всего использовать инструмент разработчика, такой как SQLProgrammer или Rapid SQL. Это повышает производительность труда за счет исключения ручного труда.

  2. Если у вас его нет, то утилиты, поставляемые с Sybase, вполне адекватны, но вам нужно научиться пользоваться каталогом. Или isql для символьного интерфейса, или DBISQL, который предоставляет окна Command и ResultSet в интерфейсе GUI.

  3. Как только у вас откроется сессия на сервере, введите следующие команды SQL. Они выполняют системные хранимые процедуры, которые опрашивают каталог:

exec sp_help (object_name) - включая таблицы и sprocs

exec sp_helptext

Есть 30 таких опросов.

Я так понимаю, вы понимаете, что спрокс может делать гораздо больше, чем простые ВСТАВКИ; обрабатывать различные типы данных в качестве параметров, и что ваш опубликованный код является лишь простым примером, а не полным quid. Как правило, чтобы включить хранимые процедуры для выполнения из приложений Java, нам необходимо предоставить оболочку (на стороне SQL).

...