سؤال

أحاول الاتصال بـ Sybase ASE 15 واستدعاء SP الذي يقوم ببعض DML. كنت أتساءل عما إذا كان لدى أي شخص أي مؤشرات لفئة مساعد Sybase مماثلة لـ 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 أو SQL السريع. إنه يحسن الإنتاجية عن طريق القضاء على العمل اليدوي.

  2. إذا لم يكن لديك ذلك ، فإن المرافق التي تأتي مع Sybase كافية تمامًا ، ولكن عليك أن تتعلم استخدام الكتالوج. إما ISQL لواجهة الأحرف أو DBISQL التي توفر Windows و ResultSet في واجهة واجهة المستخدم الرسومية.

  3. بمجرد فتح جلسة على الخادم ، اكتب أوامر SQL التالية. هذه التنفيذ تنفيذ النظام المخزنة التي تستجوب الكتالوج:

exec sp_help (object_name) - بما في ذلك الجداول و sprocs

exec sp_helptext

هناك 30 من هذه المحققين.

أعتبر أنك تدرك أن Sprocs يمكنهم القيام بأكثر من إدراج بسيط ؛ التعامل مع أنواع البيانات المختلفة كمعلمات ، وأن الرمز المنشور الخاص بك هو مجرد مثال بسيط ، وليس Quid الكامل. بشكل عام ، لتمكين Procs المخزنة للتنفيذ من تطبيقات Java ، نحتاج إلى توفير غلاف (على جانب SQL).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top