ChromeDriver Chrome 용 WebDriver

크롬 브라우저로 자동화 프로그램을 개발시 유의해야 될 사항이 있어요. 

버전정보

크롬 브라우저의 버전이 업데이트되는 거예요. 

웹 드라이브도 그때마다 업데이트를 해줘야 해요. 

https://sites.google.com/a/chromium.org/chromedriver/downloads

 

Downloads - ChromeDriver - WebDriver for Chrome

WebDriver for Chrome

sites.google.com

여기에서 버전을 확인한 다음 다운로드를 해요. 

나의 크롬 버전을 확인해요. 뒤에 두 자리는 똑같지 않아도 돼요. 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

C# Timer를 이용한 Image 업데이트 picturebox image버퍼

안녕하세요. C# 프로젝트를 실행하여 실시간 화면이 갱신되는 프로그램을 만들어 보겠어요. 

간단히 텍스트를 그려주는데 picturebox의 image에 그림을 그려 업데이트를 해줄 예정이에요. 

 

도구상자 timer

도구 상자에서 Timer를 추가합니다. 

윈도우폼

picturebox를 추가하고 흰색으로 변경해 놓았어요. 

배경색

소스로 가서 아래 내용을 추가합니다. 

  public Form1()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.Manual;
            Rectangle fullScrenn_bounds = Rectangle.Empty;
            foreach (var screen in Screen.AllScreens)
            {
                fullScrenn_bounds = Rectangle.Union(fullScrenn_bounds, screen.Bounds);
            }
            this.ClientSize = new Size(fullScrenn_bounds.Width, fullScrenn_bounds.Height);
            this.Location = new Point(fullScrenn_bounds.Left, fullScrenn_bounds.Top);

           pictureBox1.Size = new System.Drawing.Size(ClientSize.Width, ClientSize.Height);
           this.timer1.Start();
           this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
           pictureBox1.Image = new Bitmap(ClientSize.Width, ClientSize.Height);
           switch_time = 0;
        }

그럼 전체 화면으로 실행되는 그림박스를 만날 수 있어요. 

String draw_text="가동준비중";        
long switch_time=1;

두변수는 전역으로 일단 선언해 놓을게요. 

 private void timer1_Tick(object sender, EventArgs e)
        {
            switch_time = switch_time - my_util.gaptime();
            
            if (switch_time<0)
            {
                draw_text = "가동준비중";
            }
            else 
            {

            }
            
            draw_screen();
        }

timer1_tick 함수를 하나 만들어 두세요. myutil_.gaptime이 필요한데 내용은 별 내용 없습니다. 밀리세컨드를 이용해서 이전 그리기와 현재 그리기의 시간차를 구해오는 함수인데요. 내용은 아래와 같아요. 

public long gaptime()
        {
            DateTime TimeNow = DateTime.Now;
            long currenttime = TimeNow.Ticks/ TimeSpan.TicksPerMillisecond;
            if (oldtime==0)
            {
                oldtime = currenttime;
                return 0;
            }
            gapTime = currenttime - oldtime;
            Console.WriteLine("gapTime>" + gapTime);
            Console.WriteLine("oldtime>" + oldtime);
            Console.WriteLine("currenttime>" + currenttime);
            oldtime = currenttime;
            return gapTime;
        }

그리고 아래 변수를 보세요.

 long gapTime;
 long oldtime=0;

이걸 클래스내 전역으로 선언해 놓았어요. 

그리고 그리기 함수인데요.

private void draw_screen()
        {
            BufferedGraphicsContext currentContext;
            BufferedGraphics myBuffer;
            currentContext = BufferedGraphicsManager.Current;
            if (pictureBox1.Image == null)
            {
                return;
            }
            myBuffer = currentContext.Allocate(Graphics.FromImage(pictureBox1.Image), pictureBox1.DisplayRectangle);
            Rectangle ee = pictureBox1.ClientRectangle;
            //배경색 정리
            System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White);
            myBuffer.Graphics.FillRectangle(ee, myBrush);
            Font drawFont = new Font("Arial", 150);
            SolidBrush drawBrush = new SolidBrush(Color.Black);
            StringFormat drawFormat = new StringFormat();
            float x = 150.0F;
            float y = 50.0F;
            //텍스트 출력
           myBuffer.Graphics.DrawString(draw_text, drawFont, drawBrush, x, y, drawFormat);
            myBuffer.Render();
            myBuffer.Dispose();
            pictureBox1.Invalidate();
        }

텍스트가 입력이 없을 때 가동 준비 중이라는 기본 텍스트가 화면에 출력됩니다.

텍스트가 입력이 될 때 코드에 

switch_time = 10000L; 스위치 타임에 10초의 시간을 넣었어요.

그럼 입력된 텍스트를 draw_text에 넣어서 출력을 해주고 10초 뒤 다시 준비 중이라는 글씨를 화면에 출력하게 되고요.

버퍼는 더블 버퍼를 이용한 방법인데요 이방식을 하는 건 화면 떨림 현상을 없애기 위해서 이렇게 처리해요. 

픽처 박스 image에 바로 그리게 되면 수정이 될 때마다 invalidate이벤트가 발생되어 눈이 엄청 피곤한 갱신 화면을 볼 수 있어요. 

 

'C#' 카테고리의 다른 글

ChromeDriver Chrome 용 WebDriver  (0) 2020.06.01
c# mysql maria db connect 연동  (0) 2020.04.22
c# hello word c# 시작 MessageBox.Show  (1) 2020.03.09
C# String 문자열 자르기 Substring 사용법  (0) 2020.03.05
c# EXCEL 파일 읽기  (2) 2020.02.25
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

c# mysql maria db connect 연동

nuget

프로젝트를 생성한후 mysql.data를 설치해야해요.

참조로 추가해줄수 있고 nuget으로 설치가 가능해요. nuget에서 mysql검색하면 나오는데 버전은 상관없는것 같아요. 최신버전을 설치해줘요. 

설치후 mysql클래스 파일을 하나 생성해요. 

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace find_chart
{
    class Mysql_util
    {
        private static Mysql_util instance = new Mysql_util();
        public static Mysql_util Instance
        {
            get
            {
                return instance;
            }
        }
        String connectionString;
        public Mysql_util()
        {
            String database = "연동db";
            String server = "localhost";
            String user = "내아디";
            String password = "코로나19";
            connectionString = "server="+ server 
                            + ";user="+ user 
                            + ";database="+ database 
                            + ";password="+ password;
            
        }

        public Boolean DB_INSERT(String sql)
        {

            var connection = new MySqlConnection(connectionString);
            Boolean return_value=false;
            try
            {
                Console.WriteLine("MySQL DB 연결 중...");
                connection.Open();
                MySqlCommand mySqlCommand = new MySqlCommand(sql, connection);
                if(mySqlCommand.ExecuteNonQuery() == 1)
                {
                    return_value = true;
                }                
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            connection.Close();
            return return_value;
        }
        public DataTable DB_SELECT(String sql)
        {
            var connection = new MySqlConnection(connectionString);
            Console.WriteLine("connectionString : " + connectionString);
            var mySqlDataTable = new DataTable();
            try
            {
                Console.WriteLine("SQL : " + sql);
                Console.WriteLine("MySQL DB 연결 중...");
                connection.Open();
                MySqlCommand mySqlCommand = new MySqlCommand(sql, connection);
                MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader();
                mySqlDataTable.Load(mySqlDataReader);

                
                StringBuilder output = new StringBuilder();
                foreach (DataColumn col in mySqlDataTable.Columns)
                {
                    output.AppendFormat("{0} ", col);
                }
                output.AppendLine();
                foreach (DataRow page in mySqlDataTable.Rows)
                {
                    foreach (DataColumn col in mySqlDataTable.Columns)
                    {
                        output.AppendFormat("{0} ", page[col]);
                    }
                    output.AppendLine();

                }
                Console.WriteLine(output.ToString());

                mySqlDataReader.Close();
            }
            catch (Exception ex)
            {   
                Console.WriteLine(ex.ToString());
            }
            connection.Close();
            return mySqlDataTable;
        }
    }
}

 

mysql_util 이라고 생성했어요. SELECT문과 UPDATE문을 사용할수 있게 만들었어요. 

사용할 폼에서 선언해요. 

Mysql_util mysql_util = Mysql_util.Instance; 

그리고 한번 테스트를 해보았어요. 폼에서 특정 검색언어를 받아서 조회해서 화면에 출력하는것이에요. 

쿼리는 이렇게 작성해서 테스트 해보았어요. 

 String sql = "SELECT * FROM tb_member WHERE uid = '" + input_text+"'";

var mySqlDataTable = mysql_util.DB_SELECT(sql);
StringBuilder output = new StringBuilder();
            String v_name = "손님";
            foreach (DataRow page in mySqlDataTable.Rows)
            {
                foreach (DataColumn col in mySqlDataTable.Columns)
                {
                    output.AppendFormat("{0} ", page[col]);
                }
                //DataColumn col = new DataColumn("uname");
                v_name = page["uname"].ToString();
                output.AppendLine();

            }
            Console.WriteLine(output.ToString());

출력물

출력이 잘되고 있네요. 

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

c# hello word c# 시작 MessageBox.Show

새 프로젝트를 만들기

프로그래밍의 시작 HELLO WORLD를 출력해볼게요.

콘솔창에 찍을수도 있지만 메세지 박스를 이용해 출력하는 형태로 만들어 볼게요.

일단 새프로젝트 만들기를 선택하세요.

WINDOWS FORMS 앱

선택 항목에 윈도우 폼 앱 이라고 보일거에요. 

FORM1

폼이 보일거에요. 

왼쪽에 보시면 도구상자 라고 보일거에요. 도구상자를 눌러서 BUTTON을 추가 해요. 

BUTTON

버턴을 추가하고 적당한 위치시켜요. 오른쪽 하단 속성에 보면 Text 라고 보여요 화면에 보이는 text를 수정하는 화면이에요.

저는 hello_world라고 수정했어요. 

그리고 버튼을 더블 클릭해요. 

헬로우월드 소스

버튼클릭으로 소스가 넘어오는데 아무것도 입력이 안되어 있어요. 

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello world","설명척척");
        }

MessageBox.Show("hello world", "설명척척");

이라고 입력하고 실행을 해요. 

그럼 폼에서 디자인한 모습 그대로 화면에 나오는데요. 

버튼을 누르면 이렇게 화면창에 떠요. 

hello world

이렇게 hello world에 대해서 정리해 보았습니다. 

MessageBox에 대해서 아래의 레퍼런스를 참고 하시면 다양하게 활용가능합니다. 

https://docs.microsoft.com/ko-kr/dotnet/api/system.windows.forms.messagebox?view=netframework-4.8

 

MessageBox 클래스 (System.Windows.Forms)

 

사용자에게 메시지를 보여 주는 메시지 창을 표시합니다. 이 창을 대화 상자라고도 합니다.Displays a me

docs.microsoft.com

이상입니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

문자열 준비합니다. 

String m_value = "0123456789";

순서를 직관적으로 보기 위해서 숫자로 준비했습니다. 

            Console.WriteLine("(0, 1) " + m_value.Substring(0, 1));
            Console.WriteLine("(0, 0) " + m_value.Substring(0, 0));
            Console.WriteLine("(1, 2) " + m_value.Substring(1, 2));
            Console.WriteLine("(1, 1) " + m_value.Substring(1, 1));
            Console.WriteLine("(2, 3) " + m_value.Substring(2, 3));
            Console.WriteLine("(2, 1) " + m_value.Substring(2, 1));

결과는 순서대로 입니다. 

(0, 1) 0
(0, 0) 
(1, 2) 12
(1, 1) 1
(2, 3) 234
(2, 1) 2

이상입니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

c# EXCEL 파일 읽기

C# 2020. 2. 25. 18:29

엑셀파일을 읽어서 데이터를 처리해야할때가 있습니다.

엑셀파일을 읽는 소스는 많고 공유도 많이 되어 있지만 엑셀데이터가 다양하고 예외상황도 많이 발생하여 정리합니다.

NuGet 에서 라이브러리를 설치합니다.

excel 파일을 읽기위해서 설치합니다.

윈도우 폼에서 OpenFileDialog를 추가합니다. 

OpenFileDialog 추가

button을 누르면 파일을 읽어와서 콘솔창에 출력하는것으로 해보겠습니다. 

using Microsoft.Office.Interop.Excel;
using System;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;

위와같이 추가해 줍니다. 

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

application = 엑셀라이브러리 몸통입니다.

workbook = 엑셀파일 데이터가 통째로 들어갑니다.

worksheet = 시트 데이터가 통째로 들어갑니다.

버튼을 클릭할때 이렇게 해서 데이터를 콘솔창에 찍어 보았습니다.

            try
            {
                if (OpenFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Console.WriteLine(OpenFileDialog1.FileName);
                    ap = new Excel.Application();
                    wb = ap.Workbooks.Open(OpenFileDialog1.FileName);
                    ws = wb.Sheets[1];
                    ap.Visible = false;
                    Range range = ws.UsedRange;
                    String data = "";
                    for (int i = 1; i <= range.Rows.Count; ++i)
                    {
                        for (int j = 1; j < range.Columns.Count; ++j)
                        {
                            if (range.Cells[i, j] != null && range.Cells[i, j].Value2 != null)
                            {
                                data += "위치 : " +i+" , "+ j +" > "+ ((range.Cells[i, j] as Range).Value2.ToString() + " ");
                            }
                            else
                            {
                                data += "위치 : " + i + " , " + j + " > "+"없음 ";
                            }
                            
                        }
                        data += "\n";
                    }
                    Console.WriteLine(data);

                    /*메모리 할당 해제*/
                    DeleteObject(range);
                    DeleteObject(ws);
                    DeleteObject(wb);
                    ap.Quit();
                    DeleteObject(ap);
                    /*메모리 할당 해제*/
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("에러: " + ex.Message);
            }

        }

Console.WriteLine(OpenFileDialog1.FileName); //읽어온 파일경로와이름을 출력합니다. 

ap = new Excel.Application(); 엑셀파일을제어할 애플리케이션을 생성합니다.

wb = ap.Workbooks.Open(OpenFileDialog1.FileName); 파일을 읽어서 wb에 넣어줍니다. 

 ws = wb.Sheets[1]; //첫번째 시트 를 ws로 넣어줍니다. 이름으로도 읽어올수 있지만 경우에 따라서 하시면 될것 같습니다.

                            if (range.Cells[i, j] != null && range.Cells[i, j].Value2 != null)
                            {
                                data += "위치 : " +i+" , "+ j +" > "+ ((range.Cells[i, j] as Range).Value2.ToString() + " ");
                            }
                            else
                            {
                                data += "위치 : " + i + " , " + j + " > "+"없음 ";
                            }

데이터를 출력합니다. 

 Console.WriteLine(data);

이상 엑셀파일 읽기를 정리합니다. 

참고 출처 : https://coderwall.com/p/app3ya/read-excel-file-in-c

 

Read Excel File in C# (Example)

A protip by teddy about excel, c#, and interop.

coderwall.com

참고 출처 : https://kwanghyuk.tistory.com/167

 

C# 에서 Excel 파일을 읽는 방법

1. Microsoft.Office.Interop.Excel 참조 준비 (Nuget 패키지 다운) 이제 C#에서 Excel을 불러오고, 쓰는 것이 가능하다. 2. File Path 입력 추가 Excel 파일을 읽기 전에 App에서 Excel파일의 경로를 알아야 불..

kwanghyuk.tistory.com

전체 소스코드

sunme.zip
1.06MB

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

C# 인스타그램 이미지 피드 가져오기

화면 구성을 간단히 하였습니다. 

화면디자인

수치과인스타그램 A태그 및 이미지 피드를 가져올것입니다.  수치과 인스타그램 버튼을 누르면 할작업을 정리합니다.

찾아보니 C# 은 htmlagilitypack 주로 사용하는것 같았습니다. 

하지만 자바에서 Jsoup를 사용해본 경험이 있어 기능도 부실하고 불편했습니다. Jsoup c#버전이 있더군요. 

NSoup 라고 합니다. c#에도 Selenium이 있습니다. 이것들을 활용해서 데이터를 가져와 보겠습니다. 

NuGet패키지 관리

NuGet으로 오픈소스들을 받아 봅니다. 

NSoup, Selenium.WebDriver, Selenium.WebDriver.ChromeDriver 등을 검색하여 설치합니다. 검색은 Nsoup,selenium으로 충분합니다.

오픈소스 설치

마우스 클릭시 실행할 소스 내용입니다.

 IWebDriver driver = new ChromeDriver(); //Navigate to google page 
            IJavaScriptExecutor js;

            js = (IJavaScriptExecutor)driver;
            String base_url = "https://www.instagram.com/soodental9/";
            driver.Navigate().GoToUrl(base_url); //Close the browser 
            driver.Manage().Window.Size = new System.Drawing.Size(1614, 862);
            js.ExecuteScript("window.scrollTo(0,0)");
            NSoup.Nodes.Document doc = NSoupClient.Parse(driver.PageSource.ToString());
            Console.WriteLine(doc.Title);
           
            NSoup.Select.Elements linksOnPage = doc.Select(".v1Nh3.kIKUG._bz0w"); //클래스.. 
            int i = 1;
            foreach (NSoup.Nodes.Element page in linksOnPage)
            {
                Console.WriteLine("count : " + i++);
                Element link = page.Select("a").First();
                String linkHref = link.Attr("href");

                //System.out.println("a href : " + base_url + linkHref);
                Console.WriteLine("a href : " + base_url + linkHref);
                Element img = page.Select("img").First();
                //String imgtag = img.OuterHtml();
                String imgtag = img.Attr("src");
                Console.WriteLine("img : " + imgtag);                
            }
            driver.Close();

데이터를 가져와서 콘솔창에 찍어보니 잘가져옵니다.

콘솔창내용

이제 db에 연결하여 데이터를 잘 넣으면 될것 같습니다. 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

"al.exe"을(를) 찾을 수 없습니다. SdkToolsPath가 설정되었는지, 도구가 SdkToolsPath 아래의 올바른 프로세서 특정 위치에 있는지,

 Microsoft Windows SDK가 설치되었는지 확인하세요.


visual studio 2019 버전이 나와서 인스톨하고 2017을 지웠습니다. 

기존에 만들었던 프로그램 기능 업그레이드를 위해서 프로젝트를 다시 켰는데 이런문제가 발생하였습니다. 


오류 작업에서 SdkToolsPath "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\" 

또는 레지스트리 키 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\NETFXSDK\4.7.2\WinSDK-NetFx40Tools-x86"을(를)

 사용하여 "al.exe"을(를) 찾을 수 없습니다. SdkToolsPath가 설정되었는지, 도구가 SdkToolsPath 아래의 올바른 프로세서 특정 위치에 있는지,

 Microsoft Windows SDK가 설치되었는지 확인하세요. meseoulpixel

심각도 코드 설명 프로젝트 파일 비표시 오류(Suppression) 상태


새로 인스톨해도 안되고 ;; 대체 왜 안되나 싶어 경로에 가보니 al.exe가 없었습니다. 

다른 버전에 들어가보니 다 있길래.. 하도 답답해서 그냥 통째로 복사 했습니다. 

4.7.1 폴더에 들어가니 al.exe뿐만 아니라 파일이 많이 있길래 통으로 복사했습니다. 

마소에서 올려주는 sdk툴 아무리 설치해도.. 해결안됩니다...

이렇게 복사했습니다. 

도움이 되었길 바랍니다.


블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

아이템 배치툴?

하루정도 투자해서 만들었던거라 별기능없음 저장로드 정도? 

c# 배워본적은 없지만 대충 짠거지만 소스는 참고로 한번 보세요.



Projects.zip



블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

출처-C# : Excel 프로그래밍 (http://www.csharpstudy.com/Tips/Tips-excel.aspx)

 

1. 엑셀로 저장 -  C#에서 Excel Automation 사용

엑셀 오토메이션은 COM API들이고, C# 에서 이를 엑세스하기 위해서는 먼저 COM Interop DLL인 Microsoft.Office.Interop.Excel.dll (Visual Studio Tools for Office)을 참조해야 한다. DLL이 참조된 후에 using Microsoft.Office.Interop.Excel; 와 같이 Excel 네임스페이스를 참조하여 사용하게 된다. 기본적으로 Excel의 구조대로 먼저 Excel Application 객체를 얻은 후, Workbook 객체 그리고 Worksheet 객체를 얻은 후, 이 Worksheet의 Cell 혹은 Range를 지정하여 데이타를 핸들링한다. 사용 후 Excel 객체들을 Release해주여야 백그라운드에 Excel.exe가 남지 않는다.

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

public class ExcelTest
{
    public static void RunTest()
    {
        List<string> testData = new List<string>() 
            { "Excel", "Access", "Word", "OneNote" };

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

        try
        {
            // Excel 첫번째 워크시트 가져오기                
            excelApp = new Excel.Application();
            wb = excelApp.Workbooks.Add();
            ws = wb.Worksheets.get_Item(1) as Excel.Worksheet;

            // 데이타 넣기
            int r = 1;
            foreach (var d in testData)
            {
                ws.Cells[r, 1] = d;
                r++;
            }

            // 엑셀파일 저장
            wb.SaveAs(@"C:\temp\test.xls", Excel.XlFileFormat.xlWorkbookNormal);
            wb.Close(true);
            excelApp.Quit();
        }
        finally
        {
            // Clean up
            ReleaseExcelObject(ws);
            ReleaseExcelObject(wb);
            ReleaseExcelObject(excelApp);
        }
    }

    private static void ReleaseExcelObject(object obj)
    {
        try
        {
            if (obj != null)
            {
                Marshal.ReleaseComObject(obj);
                obj = null;
            }
        }
        catch (Exception ex)
        {
            obj = null;
            throw ex;
        }
        finally
        {
            GC.Collect();
        }
    }
}

 

 

 

2.C#에서 Excel OLEDB 사용 : 데이타 읽기, 갱신, 추가 예제
Excel 파일을 OleDbConnection을 사용해 연결을 한 후에, 다른 데이타 소스들과 같이 ADO.NET의 OleDb* 클래스들을 이용해 데이타를 가져오거나 삽입, 삭제, 갱신등을 하게 된다. 아래 예제는 엑셀 파일로부터 데이타를 읽고, 수정 및 추가를 하는 예이다.


private void ExcelTest()
{
   // OLEDB를 이용한 엑셀 연결
   string szConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\x\test.xls;Extended Properties='Excel 8.0;HDR=No'";
   OleDbConnection conn = new OleDbConnection(szConn);
   conn.Open();

   // 엑셀로부터 데이타 읽기
   OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn);
   OleDbDataAdapter adpt = new OleDbDataAdapter(cmd);
   DataSet ds = new DataSet();
   adpt.Fill(ds);

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
      string data = string.Format("F1:{0}, F2:{1}, F3:{2}", dr[0], dr[1], dr[2]);
      MessageBox.Show(data);
   }
         
   // 엑셀 데이타 갱신
   cmd = new OleDbCommand("UPDATE [Sheet1$] SET F2='Hello' WHERE F1='a'", conn); 
   cmd.ExecuteNonQuery();
   cmd = new OleDbCommand("UPDATE [Sheet1$A2:C2] SET F2='World'", conn);
   cmd.ExecuteNonQuery();

   // 데이타 추가
   cmd = new OleDbCommand("INSERT INTO [Sheet1$](F1,F2,F3) VALUES ('A3','B3','C3')", conn);
   cmd.ExecuteNonQuery();

   conn.Close();
}



블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,