Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

  1. Если вы разрабатываете SQL для Sybase (или MS), вы лучше отказываются с использованием инструмента разработчика, такого как SQLPROGRAMMER или RAPE SQL. Улучшает производительность, устраняя ручной труд.

  2. Если у вас нет этого, то утилиты, которые поставляются с Sybase, довольно адекватно, но вам нужно научиться использовать каталог. Либо ISQL для интерфейса символов или DBISQL, который предоставляет команды и окна ASTESTET в интерфейсе GUI.

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

EXEC SP_HELP (Object_Name) - включая таблицы и отображения

exec sp_helptext.

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

Я понимаю, что понимаете, что SPROCS может делать гораздо больше, чем простые вставки; Обработка различных типов данных в качестве параметров, и что ваш продушенный код - это просто простой пример, а не полный вариант. Как правило, чтобы включить сохраненные Procs для выполнения из приложений Java, нам нужно предоставить обертку (на стороне SQL).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top