본문 바로가기

C#

C# 개발 - ADO.NET으로 DB(MSSQL) 연결하기 / DB프로시저 개념 /Excel 참조하는 방법

반응형

Data Provider 데이터 공급자 
DB접속 / 읽기/ 조작에 관여

**연결형 중요한 클래스**
sqlConnection
sqlCommand
sqlDataReader -> 데이터 뷰어 


 
Data Set(데이터 셋)
비연결형의 메모리형 데이터 베이스

**비연결형 중요한 클래스**
sqlConnection : 공통점 ->  
DataSet 
DataTable
DataAdapter DataSet에 데이터 저장

 

상속 계층구조 

System.Data.SqlClient.SqlConnection

 

SqlConnection 연결
*생성자를 통해 연결 
SqlConnection(string)
*생성자 + ConnecrionString
SqlConnection()

*연결문자열 만들기 
-대소문자 구분하지 않음
-MSDN참조
-기본적인 연결 문자열 

 

SqlConnection 연결문자열 

data source 또는 server

data source = (localhost)\SQLEXPRESS

 

integrated security =false -> 사용자 id pw 사용하는 경우

 

integrated security =true -> 윈도우즈 인증(잘 안쓴다)

 

기본적인 연결 문자열  -> SqlConnection(string)생성자 string 변수에 들어가는 값

"server=.\\SQLEXPRESS;database=test,uid=sa;pwd=12345;

 

연결이 되면 public override void Open() 열기 public override void Close() 닫기

 

ConnectionState State{ get; }

enum 상태로 open close  broken connecting 등이 들어가 있다. 

 

using ()

{

 

 

이거는 파일 입출력 close를 깜빡해도 자동으로 끊어 준다. 

  SqlCommand cmd = new SqlCommand();
            try
            {    
                DataTable dataTable = new DataTable();
                DataSet dt = new DataSet(); //데이터 테이블의 윗 계념인가?

                cmd.Connection = new SqlConnection(COMMON.ConstValues.System.DB._Conn);
                //여기까지가 디비 연결

                cmd.CommandText = "프로시저 명!";

                cmd.CommandType = CommandType.StoredProcedure;
                //프로시저 가져오는거 

                //제품구분
                cmd.Parameters.Add(new SqlParameter("@파라메타 이름", Method.ChkDbNull(this.TxtBox_ProDVCD.EditValue)));
                //품목구분
                cmd.Parameters.Add(new SqlParameter("@파라메타 이름", Method.ChkDbNull(this.TxtBox_Pro_ItemCD.EditValue)));
                //소분류
                cmd.Parameters.Add(new SqlParameter("@파라메타 이름", Method.ChkDbNull(this.TxtBox_Pro_SmCD.EditValue)));
                //제품코드
                cmd.Parameters.Add(new SqlParameter("@파라메타 이름", Method.ChkDbNull(this.TxtBox_ProCD.EditValue)));
                //거래처
                cmd.Parameters.Add(new SqlParameter("@파라메타 이름", Method.ChkDbNull(this.TxtBox_Find_CustomerCD.EditValue)));

                cmd.Connection.Open();

                SqlDataAdapter adt = new SqlDataAdapter();

                adt.Fill(dataTable);

                this.Grid_List.DataSource = dataTable;

 

DB

저장 프로시저란? 

저장 프로시저 또는 스토어드 프로시저는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것으로, 영구저장모듈이라고도 불린다. 위키백과

 

저장 프로시저 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 저장 프로시저 또는 스토어드 프로시저(stored procedure)는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. 데이터베이스에 대한 일련의 작

ko.wikipedia.org

프로시저로 하나의 큰 함수를 만들어 변경 없이 지속적으로 당겨 쓸 수 있다. 

GETDATE()의 경우 기본 제공 함수로 년도 날짜 시간 초까지 나오는 함수이다. 

 

1.  sql command 선언
2.  try 문
3.  데이터 담을 Datatable 선언 

4.  cmd.connection = new sqlconnection(common.constvalues.system.DB._conn)

5.  cmd.commandtext = "프로시저명"
6.  cmd.commandtype =commandType.storeprocdure 

7. 파라미터 작성 cmd.parameters.add(new sqlparameter("컬럼명",값)

8.cmd.connection.open()

9.안정화 시켜주는 거라고 생각하자 . sqldataadapter dpt =new sqldataadapter(cmd) 

10.안정화 된거를 datatable에 올려주기 dpt.Fill(datatable)

 

devexpress formatconditions

 

엑셀 참조시

 

C#에서 엑셀을 연동하는데 Microsoft.Office.Interop.Excel이 필요하다더군요.

 

using Microsoft.Office.Interop.Excel;

 

그런데 자꾸만 Office 부분에 빨간 줄이 들어옵니다



참조 관리자에서 COM -> Microsoft Excel 14.0 Object Liberary 이걸 찾아야합니다. 

이후 엑셀 코딩은 아래를 참고해서 진행하면 된다.

m.csharpstudy.com/Practical/View?aspx=Prac-excel.aspx&title=C%23%20%EC%97%91%EC%85%80%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

C# 엑셀 프로그래밍

C# : Excel 프로그래밍 C#을 이용해 Excel 파일에 데이타를 읽거나 쓸 때, Excel Automation을 이용하거나 OLEDB를 이용할 수 있다. (1) C#에서 엑셀 오토메이션을 이용하기 위해서는 Excel Interop 을 참조한 후,

m.csharpstudy.com

private DataTable ReadExcelData(string path)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("업체구분", typeof(string));
            dt.Columns.Add("거래처명", typeof(string));
            dt.Columns.Add("대표자명", typeof(string));
            dt.Columns.Add("사업자", typeof(string));
            dt.Columns.Add("품목1", typeof(string));
            dt.Columns.Add("품목2", typeof(string));
            dt.Columns.Add("품목3", typeof(string));
            dt.Columns.Add("사업자번호", typeof(string));
            dt.Columns.Add("생년월일", typeof(string));
            dt.Columns.Add("업종", typeof(string));
            dt.Columns.Add("업태", typeof(string));
            dt.Columns.Add("농가", typeof(string));
            dt.Columns.Add("공선회", typeof(string));
            dt.Columns.Add("GAP농가", typeof(string));
            dt.Columns.Add("은행명", typeof(string));
            dt.Columns.Add("계좌번호", typeof(string));
            dt.Columns.Add("유형", typeof(string));
            dt.Columns.Add("국가명", typeof(string));
            dt.Columns.Add("화폐명", typeof(string));
            dt.Columns.Add("우편번호", typeof(string));
            dt.Columns.Add("기본주소", typeof(string));
            dt.Columns.Add("나머지주소", typeof(string));
            dt.Columns.Add("담당자명", typeof(string));
            dt.Columns.Add("핸드폰번호", typeof(string));
            dt.Columns.Add("전화번호", typeof(string));
            dt.Columns.Add("팩스번호", typeof(string));
            dt.Columns.Add("이메일", typeof(string));
            dt.Columns.Add("비고", typeof(string));

            Excel.Application excelApp = null;
            Excel.Workbook wb = null;
            Excel.Worksheet ws = null;

            try
            {
                excelApp = new Excel.Application();
                wb = excelApp.Workbooks.Open(path);
                ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;

                Excel.Range rng = ws.UsedRange;

                object[,] data = rng.Value;

                for (int r = 2; r <= data.GetLength(0); r++)
                {
                    if (Convert.ToString(data[r, 1]).Trim().Equals(""))
                        continue;

                    DataRow dr = dt.NewRow();

                    dr["업체구분"] = Convert.ToString(data[r, 1]).Trim();
                    dr["거래처명"] = Convert.ToString(data[r, 2]).Trim();
                    dr["대표자명"] = Convert.ToString(data[r, 3]).Trim();
                    dr["사업자"] = Convert.ToString(data[r, 4]).Trim();
                    dr["품목1"] = Convert.ToString(data[r, 5]).Trim();
                    dr["품목2"] = Convert.ToString(data[r, 6]).Trim();
                    dr["품목3"] = Convert.ToString(data[r, 7]).Trim();
                    dr["사업자번호"] = Convert.ToString(data[r, 8]).Trim();
                    dr["생년월일"] = Convert.ToString(data[r, 9]).Trim();
                    dr["업종"] = Convert.ToString(data[r, 10]).Trim();
                    dr["업태"] = Convert.ToString(data[r, 11]).Trim();
                    dr["농가"] = Convert.ToString(data[r, 12]).Trim();
                    dr["공선회"] = Convert.ToString(data[r, 13]).Trim();
                    dr["GAP농가"] = Convert.ToString(data[r, 14]).Trim();
                    dr["은행명"] = Convert.ToString(data[r, 15]).Trim();
                    dr["계좌번호"] = Convert.ToString(data[r, 16]).Trim();
                    dr["유형"] = Convert.ToString(data[r, 17]).Trim();
                    dr["국가명"] = Convert.ToString(data[r, 18]).Trim();
                    dr["화폐명"] = Convert.ToString(data[r, 19]).Trim();
                    dr["우편번호"] = Convert.ToString(data[r, 20]).Trim();
                    dr["기본주소"] = Convert.ToString(data[r, 21]).Trim();
                    dr["나머지주소"] = Convert.ToString(data[r, 22]).Trim();
                    dr["담당자명"] = Convert.ToString(data[r, 23]).Trim();
                    dr["핸드폰번호"] = Convert.ToString(data[r, 24]).Trim();
                    dr["전화번호"] = Convert.ToString(data[r, 25]).Trim();
                    dr["팩스번호"] = Convert.ToString(data[r, 26]).Trim();
                    dr["이메일"] = Convert.ToString(data[r, 27]).Trim();
                    dr["비고"] = Convert.ToString(data[r, 28]).Trim();

                    dt.Rows.Add(dr);
                }

                wb.Close(true);
                excelApp.Quit();

                return dt;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "경고!", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                return null;
            }
            finally
            {
                ReleaseExcelObject(ws);
                ReleaseExcelObject(wb);
                ReleaseExcelObject(excelApp);
            }
        }
반응형