GSI

[web.config 쪽에 해당 내용 추가]
 <appSettings>
  <add key="DSN" value="Data Source=dev.iamgsi.com,1433;Initial Catalog=testdb;user id=test;Password=test;"/>
 </appSettings>

[DB 처리 클래스]
using System;
using System.Collections.Generic;
using System.Web;
using System.IO;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace WebApplication1
{
    public class GDBCon
    {
        private int mCount = 0;
        private SqlConnection mDbConn = null;
        private SqlCommand mCmd = null;
        private SqlDataReader mReader = null;
        StringBuilder sb = new StringBuilder();

        /* DataBase Connection Open */
        public void DbConn()
        {
            try
            {
                mDbConn = new SqlConnection(GetDSN);
                mDbConn.Open();
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "DataBase Open 실패");
            }
        }

        // 연결문자열을 위한 Property
        protected string GetDSN
        {
            get
            {
                // 밑에 구문이 web.config 에 있는 AppSettings
                return System.Configuration.ConfigurationSettings.AppSettings["BoardDSN"];
            }
        }
       
        /* DataBase Connection Close */
        public void DbClose()
        {
            if (mDbConn == null)
            {
                return;
            }

            try
            {
                if (mDbConn.State.ToString() == "Open")
                {
                    mDbConn.Close();
                }
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "DataBase Close 실패");
            }
        }

        /* DataBase Transaction Init */
        public void InitTransaction(string TransName)
        {
            try
            {
                mCmd = new SqlCommand();
                mCmd.Connection = mDbConn;
                mCmd.Transaction = mDbConn.BeginTransaction(IsolationLevel.ReadCommitted, TransName);
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "Trancsaction Open 실패");
            }
        }

        /* Transaction Execute Query */
        public void ExecuteTransaction(string[] QueryArr)
        {
            try
            {
                foreach (string Query in QueryArr)
                {
                    mCmd.CommandText = Query;
                    mCmd.ExecuteNonQuery();
                }
                mCmd.Transaction.Commit();

            }
            catch (Exception e)
            {
                mCmd.Transaction.Rollback();
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "Trancsaction Commit 실패");
            }
        }


        /* Query Execute */
        public void ExecuteQuery(string Query)
        {
            try
            {
                mCmd = new SqlCommand(Query, mDbConn);
                mCmd.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, Query);
            }
        }

        /* SQL DataReader Fatech Query */
        public SqlDataReader FatechQuery(string Query)
        {
            try
            {
                mCmd = new SqlCommand(Query, mDbConn);
                mReader = mCmd.ExecuteReader();
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, Query);
            }
            return mReader;
        }

        /* SQL DataReader Close */
        public void ReaderClose()
        {
            try
            {
                if (!mReader.IsClosed)
                {
                    mReader.Close();
                }
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "SQLReader Close 실패");
            }
        }

        /* Procedure Execute */
        public int ExecuteProc(string ProcName, IDataParameter[] parameters)
        {
            int Result = 0;
            try
            {
                SqlCommand Cmd = BuildIntCommand(ProcName, parameters);
                Cmd.ExecuteNonQuery();
                Result = (int)Cmd.Parameters["ReturnValue"].Value;
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "Procedure ExecuteProc Error");
            }
            return Result;
        }

        /* SQL DataReader Fatech Procedure */
        public SqlDataReader FatechProc(string ProcName, IDataParameter[] parameters)
        {
            SqlCommand Cmd = BuildProcCommand(ProcName, parameters);
            try
            {
                Cmd.CommandType = CommandType.StoredProcedure;
                mReader = Cmd.ExecuteReader();
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "Procedure FatechProc Error");
            }
            return mReader;
        }

        /* Execute Query DateSet */
        public DataSet ExecuteDataSet(string Query, string TableName, int StartRecord, int PageSize)
        {
            DataSet mDataSet = new DataSet();
            try
            {
                SqlDataAdapter mDataAdapter = new SqlDataAdapter(Query, mDbConn);
                mDataAdapter.Fill(mDataSet, StartRecord, PageSize, TableName);
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, Query);
            }

            return mDataSet;
        }

        /* Execute Procedure DateSet */
        public DataSet ExecuteProcDataSet(string ProcName, IDataParameter[] parameters, string TableName, int StartRecord, int PageSize)
        {
            DataSet mDataSet = new DataSet();
            SqlDataAdapter mDataAdapter = new SqlDataAdapter();

            mDataAdapter.SelectCommand = BuildProcCommand(ProcName, parameters);
            try
            {
                mDataAdapter.Fill(mDataSet, StartRecord, PageSize, TableName);
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "Procedure ExecuteProcDataSet Error");
            }

            return mDataSet;
        }

        /* Total Count Function */
        public int TotalQuery(string Query)
        {
            try
            {
                mCmd = new SqlCommand(Query, mDbConn);
                mCount = (int)mCmd.ExecuteScalar();
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, Query);
            }
            return mCount;
        }

        /* Procedure BuildIntCommand */
        protected SqlCommand BuildIntCommand(string ProcName, IDataParameter[] parameters)
        {
            SqlCommand Cmd = BuildProcCommand(ProcName, parameters);

            try
            {
                Cmd.Parameters.Add(new SqlParameter("ReturnValue",
                 SqlDbType.Int,
                 4, /* Size */
                 ParameterDirection.ReturnValue,
                 false, /* is nullable */
                 0, /* byte precision */
                 0, /* byte scale */
                 string.Empty,
                 DataRowVersion.Default,
                 null));
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "Procedure BuildIntCommand Error");
            }

            return Cmd;
        }

        /* Procedure Parameter Build */
        protected SqlCommand BuildProcCommand(string ProcName, IDataParameter[] parameters)
        {
            try
            {
                mCmd = new SqlCommand(ProcName, mDbConn);
                mCmd.CommandType = CommandType.StoredProcedure;

                foreach (SqlParameter parameter in parameters)
                {
                    mCmd.Parameters.Add(parameter);
                }
            }
            catch (Exception e)
            {
                DbErrorMsg(e.Source, e.Message, e.StackTrace, "Procedure BuildProcCommand Error");
            }

            return mCmd;
        }

        /* Error Message Print */
        public void DbErrorMsg(string ErrSource, string ErrMsg, string stack, string Query)
        {
            DbClose();
            string ErrorMsg = "Error Souce =" + ErrSource + "<br>"
             + "Error Message = <font color='red'><b>" + ErrMsg + "</b></font><br>"
             + "Stack = " + stack + "<br><br>"
             + "Query = <font color='blue'><b>" + Query + "</b></font>";
            System.Web.HttpContext.Current.Response.Write(ErrorMsg);
            System.Web.HttpContext.Current.Response.End();
        }
    }
}

Posted by gsi
:


url 파일을 하나 만들어서 인스톨 쉴드를 통해서 배포를 했는데
설치한 pc에서 해당 url이 바탕화면에 깔리긴 하는데.
이상하게 아이콘 이미지가 나오지 않았다.

제작을 할때 바로가기 아이콘을 하나 만든 다음에 ico 를 해당 url 파일 속성에서 아이콘 변경을 통해서
처리를 했다.
근데 문제는 여기서 발생했는데 ico 파일을 메모장에서 열어 보면 아래와 같은 경로 입력 부분이 나오게 된다.

[InternetShortcut]
URL=http://www.test.co.kr/
IDList=
IconFile=C:\Program Files\JupiterSoft\test\bb.ico
HotKey=0
IconIndex=0
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2

위와 같이 IconFile 쪽에 내가 설치한후 ico 파일이 있는 경로를 적어 줘야
다른 pc에서 제대로 나오는걸 확인 했다.

Posted by gsi
:


한동안 포스트를 못했다.
삶이 너무 바쁘게 돌아 가다 보니

이 포스트를 한건건 소스를 공개 하는건 아니다.
하지만 몇가지 경우에 대해서 공론화를 하기 위해서다.
물론 여기에 있어서 지원을 받고 싶거나, 질문을 주시면 성심 성의껏 도와줄 의양은 있어요 ^^

ActiveX를 이용해서 웹에서 실행 파일을 제어 하기 위해서
최근에 작업을 했다.

기존에 크게 문제시 되었던 부분이 아니라서 개발 일정을 짦게 잡았던게 화근이였다. -.-

참.. 쉽게 해결되지 않는게 프로그램의 일이란걸 세삼 느꼈다.

.Net 2003으로 ActiveX를 개발을 하였다.
아주 기본으로 해서 메소드를 정의 하고 웹에 붙였다.

로컬에서는 아주 잘 되었고 그래서 웹 서버에 올려서 테스트 하면 잘 되겠지
싶었다.
웹 서버에 올리고 노란바가 정상적으로 나왔다.
그래서 이제 되겠거니 했지만.
ActiveX의 메소드가 웹에서 인식이 되지 않아서 메소드 정의가 없다는 오류가 나왔다.
IE 6.0, 8.0 모두 그런 현상이 발생 하였다.

그래서 보안 탭의 신뢰할 수 있는 사이트에 넣고 하니
제대로 될때도 있었지만.
안될때가 더 많았고 안되는 pc가 더 많았다.

근데 또 이상한건 신뢰할 수 있는 사이트에 웹 주소를 넣고 나서는
ACtiveX의 버젼을 올려서 배포를 해도 노란바가 아예 뜨지를 않았다.
하지만 구동은 정상적으로 업데이트 된게 실행이 되는 상태였다.

근데 그것도 이상하게 메소드가 없는 오류가 나올때가 있었다.

여러가지를 테스트해본 결과 IObjectSafety 인가 그 인터페이스 추가에서 문제가 나왔던거 같다.
이 코드를 적용하는데 있어서 helper.h, cpp 파일을 추가 하고 Ctrl.cpp에 추가 하고 하는 과정에서
오류가 있었던거 같다.

이제는 어려 곳의 컴퓨터에서 실행을 해봤지만 잘 되는거 같다.

ActiveX에서 많이 어려움을 가지는 초보 개발자가 있다면
언제든 쪽지 및 네이트온 추가를 통해서 질문해 주시기 바랍니다.
프로그래머는 항상 자료를 공유 하고 많이 나누면서 서로 발전해야 한다고 생각해요

그럼 오늘도 해결 안되는 문제를 안고 씨름 하는 많은 개발자들 화이팅 ^^
Posted by gsi
:

> 테이블 합치는 방법 : 테이블 + 2009 + 09
> 테이블이 존재 하지 않으면 테이블을 생성한다.

---------------------------------------------------------------------------------------
DECLARE @curDateString varchar(100)
DECLARE @tableCount int
DECLARE @sql nvarchar(4000)

-- 현재 시간에서 년, 월을 가져온다.
SET @curDateString = 'TBL_SERVICE_LOG_'
     + convert(varchar(30), year(GetDate()))
     + REPLICATE('0', 2 - len(month(GetDate()))) + convert(varchar(30), month(GetDate()))
--print @curDateString

-- 테이블 존재 하는지 개수를 가져온다.
select @tableCount = count(*)
from sysobjects
where xtype='U' and
name = @curDateString

--print @tableCount

-- 테이블이 존재 하지 않으면 테이블을 생성한다.
IF @tableCount != 1
BEGIN
 SET @sql = N'CREATE TABLE ' + @curDateString + N' (' +
 N'[OrderNo] [int] NULL,' + 
 ...................생략...............
 N'[OriginTelNo] [varchar](50) NULL' +
 N');'
 EXEC(@sql)
END
--ELSE
--BEGIN
 --print '테이블 존재함'
--END

Posted by gsi
:


[MS-SQL][Visual C++ 6.0_Stored_Procedures_TEST_예제_Program]


//--------------------------------------------------------------
[New Class...]


[Class type] : [Generic Class] | [Name] : [CADODB]
#include "ADODB.h"

class CADODB
{
private:
    _RecordsetPtr  m_RS;
    _CommandPtr    m_CMD;
    _ConnectionPtr m_CONN;

public:
             CADODB();
    virtual ~CADODB();

    CString  db_Error_Message;

    BOOL     DBConnect(char* pWD, char* pID, char* pDataBase, char* pConnectIP);
    BOOL     IsOpen_DB();
    BOOL     IsOpen_RS();
    void     Close_RS();

    BOOL     IsEOF();
    BOOL     Next();
    BOOL     First();

    int      GetRecordCount();
    int      GetFieldCount();

    void     GetRS(_variant_t x, _bstr_t& ret);
    void     GetRS(_variant_t x, _variant_t& ret);
    void     GetRS(_variant_t x, float& ret);
    void     GetRS(_variant_t x, long& ret);
    void     GetRS(_variant_t x, double& ret);

    void     Open_Command(char* StoredProcedureString);
    void     Add_Parameters(_bstr_t _ParameterName,
                             DataTypeEnum _SqlDbType,
                             int _Size,
                             ParameterDirectionEnum _Direction,
                            _variant_t _User_Value);

    BOOL     RowReader();
    long     QueryExecute(_bstr_t _ParameterName);
};



//--------------------------------------------------------------
[ClassView] - [CADODB]

CADODB::CADODB()
{
    m_RS = NULL;
    m_CMD = NULL;
    m_CONN = NULL;
}

CADODB::~CADODB()
{
    if(m_RS != NULL)
    {
        if(IsOpen_RS())
        {
            m_RS->Close();
        }
    }

    if(m_CONN != NULL)
    {
        if(IsOpen_DB())
        {
            m_CONN->Close();
        }
    }
}

BOOL CADODB::DBConnect(char* pWD, char* pID, char* pDataBase, char* pConnectIP)
{
    CString strConnectionString;
    strConnectionString.Format(_T("Provider=SQLOLEDB.1;Persist Security Info=True;
                                   Password = %s;
                                   User ID = %s;
                                   Initial Catalog = %s;
                                   Data Source = %s"),
                                   pWD,
                                   pID,
                                   pDataBase,
                                   pConnectIP);

    m_CONN.CreateInstance("ADODB.Connection");
    m_CONN->ConnectionString = _bstr_t(strConnectionString);
    HRESULT hr = m_CONN->Open("", "", "", -1);

    if(SUCCEEDED(hr))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

BOOL CADODB::IsOpen_DB()
{
    return ((m_CONN->GetState() == adStateOpen ) ? TRUE : FALSE);
}

BOOL CADODB::IsOpen_RS()
{
    return ((m_RS->GetState() == adStateOpen ) ? TRUE : FALSE);
}

void CADODB::Close_RS()
{
    if(IsOpen_RS())
    {
        m_RS->Close();
    }
}

BOOL CADODB::IsEOF()
{
    return m_RS->adoEOF;
}

BOOL CADODB::Next()
{
    return (FAILED(m_RS->MoveNext()) ? FALSE : TRUE);
}

BOOL CADODB::First()
{
    return (FAILED(m_RS->MoveFirst()) ? FALSE : TRUE);
}

int CADODB::GetRecordCount()
{
    HRESULT hr;
    ASSERT(m_RS != NULL);
    try
    {
        int count = (int)m_RS->GetRecordCount();

        if (count < 0)
        {
            hr = m_RS->MoveFirst();
            count = 0;
            while (!m_RS->adoEOF)
            {
                count++;
                m_RS->MoveNext();
            }
        }

        if (m_RS->adoEOF)
        {
            m_RS->MoveFirst();
        }

        return count;
    }
    catch (_com_error ex)
    {
        TRACE(_T("Warning: GetRecordCount ErrorMessage: %s;
                  File: %s;
                  Line: %d\n"),
                  ex.ErrorMessage(),
                __FILE__,
                __LINE__);
        return -1;
    }
}

int CADODB::GetFieldCount()
{
    return (int)m_RS->Fields->GetCount();
}

void CADODB::GetRS(_variant_t x, _bstr_t& ret)
{
    ret = m_RS->Fields->Item[x]->Value;
}

void CADODB::GetRS(_variant_t x, _variant_t& ret)
{
    ret = m_RS->Fields->Item[x]->Value;
}

void CADODB::GetRS(_variant_t x, float& ret)
{
    ret = m_RS->Fields->Item[x]->Value;
}

void CADODB::GetRS(_variant_t x, long& ret)
{
    ret = m_RS->Fields->Item[x]->Value;
}

void CADODB::GetRS(_variant_t x, double& ret)
{
    ret = m_RS->Fields->Item[x]->Value;
}

void CADODB::Open_Command(char* StoredProcedureString)
{
    m_CMD.CreateInstance("ADODB.Command");
    m_CMD->CommandText = StoredProcedureString;
    m_CMD->CommandType = adCmdStoredProc;
}

void CADODB::Add_Parameters(_bstr_t _ParameterName,
                               DataTypeEnum _SqlDbType,
                               int _Size,
                               ParameterDirectionEnum _Direction,
                              _variant_t _User_Value)
{
    _ParameterPtr AddParameter;
    AddParameter.CreateInstance("ADODB.Parameter");
    AddParameter->Name = _ParameterName;
    AddParameter->Type = _SqlDbType;
    AddParameter->Size = _Size;
    AddParameter->Direction = _Direction;
    m_CMD->Parameters->Append(AddParameter);
    m_CMD->Parameters->Item[_ParameterName]->Value = _User_Value;
}

BOOL CADODB::RowReader()
{
    try
    {
        m_CMD->ActiveConnection = m_CONN;
        m_CMD->Execute(NULL, NULL, adCmdStoredProc);

        m_RS.CreateInstance(__uuidof(Recordset));
        m_RS->PutRefSource(m_CMD);

        _variant_t vNull;
        vNull.vt = VT_ERROR;
        vNull.scode = DISP_E_PARAMNOTFOUND;
        m_RS->CursorLocation = adUseClient;
        m_RS->Open(vNull, vNull, adOpenStatic, adLockOptimistic, adCmdStoredProc);

        return true;
    }
    catch (_com_error ex)
    {
        if(m_RS != NULL)
        {
            db_Error_Message = ex.ErrorMessage();
            Close_RS();
        }
        else
        {
            db_Error_Message = ex.ErrorMessage();
        }
        return false;
    }
}

long CADODB::QueryExecute(_bstr_t _ParameterName)
{
    m_CMD->ActiveConnection = m_CONN;

    try
    {
        m_CMD->Execute(NULL, NULL, adCmdStoredProc);

        return long(m_CMD->Parameters->Item[_ParameterName]->Value);
    }
    catch (_com_error ex)
    {
        db_Error_Message = ex.ErrorMessage();

        return -1;
    }
}



//--------------------------------------------------------------
[include files] - [stdafx.h]
//------------------------------
#pragma warning(push)
#pragma warning(disable:4146)
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","adoEOF")
#pragma warning(pop)
//--------------------------------------------------------------


//--------------------------------------------------------------
[ClassView] - [CADOVCApp]

BOOL CADOVCApp::InitInstance()
{
     CoInitialize(NULL); //ADO 초기화
}

int CADOVCApp::ExitInstance()
{
    CoUninitialize();   //ADO 제거

    return CWinApp::ExitInstance();
}


//--------------------------------------------------------------
[include] - [ADOVCDlg.h]


#include "ADODB.h"

class CADOVCDlg : public CDialog
{
public:
    void Execute_Message_Send(CString GetMessage);
    void iMageList_LiST_View();
    BOOL DBConnect();
    CADODB m_ADO;
    CStatusBar  m_wndStatusBar;


//--------------------------------------------------------------
[ClassView] - [CADOVCDlg]

BOOL CADOVCDlg::OnInitDialog()
{
    if(!DBConnect())
    {
        AfxMessageBox("Error DB Connect!!");
    }
}


//--------------------------------------------------------------
[ClassView] - [CADOVCDlg]

void CADOVCDlg::Execute_Message_Send(CString GetMessage)
{
    m_Message_List.AddString(GetMessage);
    m_Message_List.SetTopIndex(m_Message_List.GetCount() - 1);
}

// Stored Procedure - [MS-SQL][Microsoft Visual C++ 6.0]
BOOL CADOVCDlg::DBConnect()
{
    if(m_ADO.DBConnect("550107", "sa", "iMageDB", "SCORPION"))
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

void CADOVCDlg::OnBtnDelete()
{
    CString msgString;
    long ErrorNUM = 0;
    BOOL b_GetValue = TRUE;

    m_DB_Delete_NUM = GetDlgItemInt(IDC_EDIT_DELETE, &b_GetValue, FALSE);

    msgString.Format(_T("[삭제] - [PF1_1_5_iMageList_DELETE]"));
    m_wndStatusBar.SetPaneText(0, msgString);

    msgString.Format(_T("[삭제]-[PF1_1_5_iMageList_DELETE] - [삭제번호] → [%d]"), m_DB_Delete_NUM);
    Execute_Message_Send(msgString);

    msgString.Format(_T("삭제번호 : [%d]\n\n삭제 하시겠습니까?"), m_DB_Delete_NUM);
    if(AfxMessageBox(msgString, MB_YESNO) == IDYES)
    {
        m_ADO.Open_Command("PF1_1_5_iMageList_DELETE");
        m_ADO.Add_Parameters("@DB_ERR", adInteger, 4, adParamOutput, 0l);
        m_ADO.Add_Parameters("@iMageNUM_1", adInteger, 4, adParamInput, m_DB_Delete_NUM);
        ErrorNUM = m_ADO.QueryExecute("@DB_ERR");

        if(ErrorNUM == 0)
        {
            msgString.Format(_T("[삭제] → [Success]"));
            Execute_Message_Send(msgString);

            iMageList_LiST_View();
        }
        else
        {
            if (ErrorNUM == 544)
            {
                msgString.Format(_T("[iMageList][Delete ERROR] [Delete NUM] : [%d] %s"),
                                 m_DB_Delete_NUM, m_ADO.db_Error_Message);
            }
            else
            {
                msgString.Format(_T("[PF1_1_5_iMageList_DELETE][Delete ERROR] %s"), m_ADO.db_Error_Message);
            }
            Execute_Message_Send(msgString);
        }
    }
}

void CADOVCDlg::OnBtnInsert()
{
    CString msgString;
    long ErrorNUM = 0;
    BOOL b_GetValue = TRUE;

    long Get_INPUT_Error_NUM = 0;
    long Get_iMageNUM = 0;

    GetDlgItemText(IDC_EDIT_PATH, m_DB_Insert_Path);
    GetDlgItemText(IDC_EDIT_FILENAME, m_DB_Insert_FileName);
    m_DB_Insert_FileSize = GetDlgItemInt(IDC_EDIT_FILESIZE, &b_GetValue, FALSE);

    msgString.Format(_T("[저장] - [PF1_1_5_iMageList_iNSERT"));
    m_wndStatusBar.SetPaneText(0, msgString);

    msgString.Format(_T("[저장]-[PF1_1_5_iMageList_iNSERT] - [파일명] → [%s]"), m_DB_Insert_FileName);
    Execute_Message_Send(msgString);

    if(!m_ADO.IsOpen_DB())
    {
        DBConnect();
    }

    m_ADO.Open_Command("PF1_1_5_iMageList_iNSERT");
    m_ADO.Add_Parameters("@DB_ERR", adInteger, 4, adParamOutput, 0l);
    m_ADO.Add_Parameters("@iMageNUM_1", adInteger, 4, adParamOutput, 0l);
    m_ADO.Add_Parameters("@ImagePath_2", adVarChar, 255, adParamInput, _variant_t(m_DB_Insert_Path));
    m_ADO.Add_Parameters("@ImageFile_3", adVarChar, 255, adParamInput, _variant_t(m_DB_Insert_FileName));
    m_ADO.Add_Parameters("@iMageSize_4", adInteger, 4, adParamInput, m_DB_Insert_FileSize);
    ErrorNUM = m_ADO.QueryExecute("@DB_ERR");

    if(ErrorNUM == 0)
    {
        msgString.Format(_T("[추가] → [Success]"));
        Execute_Message_Send(msgString);

        iMageList_LiST_View();
    }
    else
    {
        if (ErrorNUM == 541)
        {
            msgString.Format(_T("[iMageList][iNSERT ERROR] [iMageList FileName] : [%d] %s"),
                             m_DB_Insert_FileName, m_ADO.db_Error_Message);
        }
        else
        {
            msgString.Format(_T("[iMageList][iNSERT ERROR] %s"), m_ADO.db_Error_Message);
        }
        Execute_Message_Send(msgString);
    }
}

void CADOVCDlg::OnBtnSearch()
{
    CString msgString;

    msgString.Format(_T("[조회] - [PF1_1_5_iMageList_LIST]"));
    m_wndStatusBar.SetPaneText(0, msgString);

    iMageList_LiST_View();
}

void CADOVCDlg::iMageList_LiST_View()
{
    CString msgString;
    CString db_Get_String;
    CString str_temp;

    int iROWCOUNT;
    int iField;

    BOOL b_GetValue = TRUE;

    GetDlgItemText(IDC_EDIT_SEARCH_FILENAME, m_DB_Search_FileName);
    m_DB_UserTOP = GetDlgItemInt(IDC_EDIT_USER_TOP, &b_GetValue, FALSE);

    if(m_DB_Search_FileName.GetLength() == 0 || !b_GetValue)
    {
        m_DB_Search_FileName = '%';
    }
    else
    {
        m_DB_Search_FileName = m_DB_Search_FileName + '%';
    }

    msgString.Format(_T("[조회][Stored_Procedure - %s] - [검색문자 : %s]"),
                     _T("PF1_1_5_iMageList_LIST"), m_DB_Search_FileName);
    Execute_Message_Send(msgString);

    if(!m_ADO.IsOpen_DB())
    {
        DBConnect();
    }

    m_ADO.Open_Command("PF1_1_5_iMageList_LIST");
    m_ADO.Add_Parameters("@USER_TOP", adInteger, 4, adParamInput, m_DB_UserTOP);
    m_ADO.Add_Parameters("@iMageName", adVarChar, 255, adParamInput, _variant_t(m_DB_Search_FileName));

    if(m_ADO.RowReader())
    {
        _bstr_t dbFieldGetValue;

        iROWCOUNT = m_ADO.GetRecordCount();
        if(iROWCOUNT <= 0) return;
        iField = m_ADO.GetFieldCount();

        msgString.Format(_T("Record : [%d]"), iROWCOUNT);
        m_wndStatusBar.SetPaneText(1, msgString);
        msgString.Format(_T("Field : [%d]"), iField);
        m_wndStatusBar.SetPaneText(2, msgString);

        m_ADO.GetRS(_variant_t((short)0), dbFieldGetValue);

        m_DB_Search_List.DeleteAllItems();
        for(int iROW = 0; iROW < iROWCOUNT; iROW++)
        {
            str_temp.Format(_T("%d"), (iROW + 1));
            m_DB_Search_List.InsertItem(iROW, str_temp);
            for(int jCOL = 0; jCOL < iField; jCOL++)
            {
                m_ADO.GetRS(_variant_t((short)jCOL), dbFieldGetValue);
                db_Get_String.Format(_T(("%s"), (LPCTSTR)dbFieldGetValue);

                m_DB_Search_List.SetItemText(iROW, (jCOL + 1), db_Get_String);
            }

            m_ADO.Next();
        }
        m_ADO.Close_RS();
    }
    else
    {
        msgString.Format(_T("Table ROW Read Error [%s]"), m_ADO.db_Error_Message);
        Execute_Message_Send(msgString);
    }
}



----------------------------------------------------------------
[MS-SQL] - [Stored Procedure]
----------------------------------------------------------------
[CREATE TABLE] - [iMageList]
--------------------------------
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[iMageList]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table   [dbo].[iMageList]
GO

CREATE TABLE [dbo].[iMageList]
(
             [iMageNUM] [int] IDENTITY (1, 1) NOT NULL ,
             [iMagePath] [varchar] (255) COLLATE Korean_Wansung_CI_AS NOT NULL ,
             [iMageFile] [varchar] (255) COLLATE Korean_Wansung_CI_AS NOT NULL ,
             [iMageSize] [int] NULL
) ON         [PRIMARY]
GO

ALTER TABLE  [dbo].[iMageList] WITH NOCHECK ADD
CONSTRAINT   [PK_iMageList] PRIMARY KEY  CLUSTERED
(
             [iMageNUM]
) ON         [PRIMARY]
GO

----------------------------------------------------------------


----------------------------------------------------------------
[iMageDB - iMageList] Table
+--------------------------------+
|     [iMageDB] - [DataBase]     |
+--------------------------------+
|            iMageList           |
+----------------+---------+-----+
| iMageNUM       | int     |   4 |
| iMagePath      | varchar | 255 |
| iMageFile      | varchar | 255 |
| iMageSize      | int     |   4 |
+----------------+---------+-----+
----------------------------------------------------------------


----------------------------------------------------------------
[Stored Procedures]

----------------------------------------------------------------
[PF1_1_5_iMageList_LIST]
----------------------------------------------------------------
CREATE PROCEDURE [PF1_1_5_iMageList_LIST]
                (@USER_TOP  [INT],
                 @iMageName [VARCHAR](255))

AS

SET ROWCOUNT @USER_TOP

SELECT
            [dbo].[iMageList].iMagePath,
            [dbo].[iMageList].iMageFile,
            [dbo].[iMageList].iMageSize,
            [dbo].[iMageList].iMageNUM
FROM        [dbo].[iMageList]
WHERE      ([dbo].[iMageList].iMageFile LIKE @iMageName)
ORDER BY    [dbo].[iMageList].iMageNUM DESC

GO


----------------------------------------------------------------
[PF1_1_5_iMageList_DELETE]
----------------------------------------------------------------
CREATE PROCEDURE [PF1_1_5_iMageList_DELETE]
                (@DB_ERR      [INT] OUTPUT,
                 @iMageNUM_1  [INT])

AS

SET @DB_ERR = 0
SET XACT_ABORT OFF

BEGIN TRANSACTION

DELETE [iMageDB].[dbo].[iMageList]
WHERE ([iMageDB].[dbo].[iMageList].[iMageNUM] = @iMageNUM_1)

IF @@ERROR <> 0

   BEGIN
         ROLLBACK TRANSACTION
         SET @DB_ERR = 544
         RETURN
   END

COMMIT TRANSACTION
RETURN

GO


----------------------------------------------------------------
[PF1_1_5_iMageList_iNSERT]
----------------------------------------------------------------
CREATE PROCEDURE [PF1_1_5_iMageList_iNSERT]
                (@DB_ERR           [INT] OUTPUT,
                 @iMageNUM_1       [INT] OUTPUT,
                 @iMagePath_2      [VARCHAR](255),
                 @iMageFile_3      [VARCHAR](255),
                 @iMageSize_4      [INT])

AS

SET @DB_ERR = 0
SET XACT_ABORT OFF

BEGIN TRANSACTION

INSERT INTO [iMageDB].[dbo].[iMageList]
           ([iMagePath],
            [iMageFile],
            [iMageSize])
VALUES
           (@iMagePath_2,
            @iMageFile_3,
            @iMageSize_4)

IF @@ERROR <> 0

   BEGIN
         ROLLBACK TRANSACTION
         SET @DB_ERR = 541

         RETURN
   END

SET @iMageNUM_1 = (SELECT MAX([dbo].[iMageList].iMageNUM) FROM [iMageDB].[dbo].[iMageList])

COMMIT TRANSACTION
RETURN

GO
----------------------------------------------------------------


----------------------------------------------------------------
[T-SQL]-[Data Insert]
----------------------------------------------------------------
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'CostumePlay_001.jpg',  34511)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'CostumePlay_002.jpg',  83316)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'CostumePlay_003.jpg',  95997)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'CostumePlay_004.jpg', 192613)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'CostumePlay_005.jpg',  33858)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'CostumePlay_006.jpg',  67318)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'CostumePlay_007.jpg',  64452)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'imgGirl_001.jpg', 224121)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'imgGirl_002.jpg',  58777)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'imgGirl_003.jpg',  33838)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'imgGirl_004.jpg', 191308)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'imgGirl_005.jpg', 467618)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'imgGirl_006.jpg', 184552)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'imgGirl_007.jpg',  78885)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'jpnGirl_001.jpg',  56778)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'jpnGirl_002.jpg', 123445)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'jpnGirl_003.jpg', 179880)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'jpnGirl_004.jpg',  98878)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'jpnGirl_005.jpg', 105567)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'jpnGirl_006.jpg',  58890)
INSERT INTO iMageList ([iMagePath], [iMageFile], [iMageSize]) VALUES ('iMageList\', 'jpnGirl_007.jpg',  71103)
----------------------------------------------------------------
Posted by gsi
: