반응형

 

using System;
using System.Data;
using System.Data.OleDb;
class TableAnalysis
{
     static void Main(string[] args)
     {

        string sql = "Provider=MSDAORA.1;Password=tiger;User ID=scott;Data Source=noaa;Persist Security

                        Info=True"; //oracle 서버 연결

        OleDbConnection conn = new OleDbConnection(sql);
        //conn.ConnectionString = sql;

        try
        {
             conn.Open(); //데이터베이스 연결
             OleDbCommand cmd = new OleDbCommand();
             cmd.CommandText = "select * from member"; //member 테이블
             cmd.CommandType = CommandType.Text; //검색명령을 쿼리 형태로
             cmd.Connection = conn;

             OleDbDataReader read = cmd.ExecuteReader(); //select * from member 결과

             Console.WriteLine("***** 테이블 분석 결과 *****");

            

             for (int i = 0; i < read.FieldCount; i++)
             {
                  Console.WriteLine("필드이름 : {0} \n", read.GetName(i));
              }
              Console.WriteLine("총필드 개수는" + read.FieldCount);
              read.Close();
           }

          catch (Exception ex)
           {
               Console.WriteLine("에러발생{0}", ex.Message);
           }
           finally
           {
                if (conn != null)
                {
                      conn.Close(); //데이터베이스 연결 해제
                      Console.WriteLine("데이터베이스 연결 해제..");
                 }
           }
      }
}
반응형
반응형
///<summary>
/// 데이타 테이블을 엑셀로 받아온다.
///</summary>

/// <param name="dt">원본 데이타 테이블.</param>
/// <param name="columns"> 원본 데이타 테이블의 컬럼들.</param>
/// <param name="newcolumns">보여질 테이블의 컬럼들.</param>


private static void DownExcel(System.Data.DataTable dt, string[] columns, string[] newcolumns)
{
      DataGrid grid = new DataGrid();
      System.Data.DataTable targetdt = new System.Data.DataTable();

      for (int i = 0; i < columns.Length; i++)
      {
          System.Data.DataColumn column = new System.Data.DataColumn(newcolumns[i]);
          targetdt.Columns.Add(column);
       }


       for (int i = 0; i < dt.Rows.Count; i++)
       {
           object[] obj = new object[columns.Count()];

           for (int j = 0; j < columns.Length; j++)
                 obj[j] = dt.Rows[i][columns[j]];
                 targetdt.Rows.Add(obj);
       }

       grid.DataSource = targetdt;
       grid.DataBind();

       System.Web.HttpResponse objResponse = System.Web.HttpContext.Current.Response;
       objResponse.ClearContent();
       objResponse.ClearHeaders();
       System.IO.StringWriter stringWrite = new System.IO.StringWriter();
       HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
       grid.RenderControl(htmlWrite);

       objResponse.ContentType = "application/vnd.msexcel";
       objResponse.AddHeader("content", "text/html; charset=utf-8");
       objResponse.AddHeader("content-disposition", "attachment; filename=SearchResults.xls");
       objResponse.Write("");
       objResponse.Write(stringWrite.ToString());
       objResponse.Flush();
       objResponse.Close();
       objResponse.End();
}

 

// 사용법

void btn_ok_Click(object sender, EventArgs e)
{
     string[] columns = { "title", "filename", "view_count", "blogurl" }; // 기존의 컬럼명
     string[] newcolumns = { "제목", "파일명", "조회수", "블로그주소"}; // 새로운 컬럼명
     System.Data.DataTable dt = ds.Tables[1]; // 데이타 테이블
     DownExcel(dt, columns, newcolumns);
}

 

 

반응형
반응형

안녕하세요.

 

코딩하는남자 입니다

 

이번에 게시하게 된 정보는 제조업에서 많이 사용하고 있는 미쯔비시 PLC에 대해

 

C#이라는 개발 프로그램으로 통신하는 방법을 작성해 보겠습니다

 

C#으로 PLC와 통신하는 방법은 여러가지가 있습니다

 

소켓 통신이라든지 시리얼 통신이라던지..

 

근데 왜 글자는 MX Component를 사용하는냐 이렇개 생각하실텐데요

 

간단합니다 소켓/시리얼 통신은 모든 PLC와 연결이 가능하고 앞서 말씀드린것과 같이 미쯔비시 PLC를 사용할 경우에

 

정말 간편하게 통신이 가능하기 때문인데요

 

내용을 확인하시고 편리하다 나랑 환경이 비슷하다라고 생각되시면 한번 시도해 보시기 바랍니다

 

 

 

1. MX Component v4 64bit용 설치 파일을 설치 합니다

 

 

2. Communication Setup Utility 실행

 

 

3. Communication Setup Utility 실행 후 아래 그림과 같이 설정 후 Wizard 클릭

 

 

4. Wizard 버튼을 누룬후 Logical Station number를 다음과 같이 넣고 Next 버튼을 누름

 

5. PC Side 설정

 

 

6. Comment 입력 후 Finish 버튼

 

 

7. Step 4에서 입력한 Logical Station Number는 지금까지 설정한 PLC 연결 정보를

    Mx Component에 PLC Port 번호로 지정한 것이다

    이 PLC Port번호는 PC와 PLC를 연결하는 Port번호로 사용 된다.

     확인 했으면 Exit를 눌러서 해당 프로그램을 종료한다

     참고로 아래 그림에서 PC 모양을 클릭하면 설정한 내용을 다시 입력할 수 있다

 

 

 

8. PLC Monitor Utility 실행

 

 

 

 

9. 아까 Setp4에서 입력한 Logical Station Number이 보인다 그걸 선택한 후 OK를 누룬다

 

 

10. Gx Simulatior2를 실행한 뒤 OK를 누룬다

 

 

11. Set8를 실행하면 다음과 같은 그림이 나오면 성공이다

 

이상 GX Works2의 시뮬레이션과 연동하기 위한 MX Component 설정 방법 입니다

반응형
반응형

안녕하세요.

 

코딩하는남자 입니다

 

이번 블로그 내용은 C#을 통해 차트를 작성할경우 보통 상용 API를 통해 구현하게 되는데요

 

 

 

저희 같은 서민들은 그걸 구입할 돈이 없지요ㅋ

 

그래서 열심히 인터넷 검색을 통해서 무료로 사용할 수 있는 차트가 있어서 소개해 드릴려고 합니다

 

마도 MS Chart 인데요.

 

비쥬얼스튜디오에서 개발하는 C#에서 사용하기 참 좋은 API라고 생각합니다

 

혹시 자체 개발을 통해 어떠한 통계나 수치를 표현하고 싶으시면 한번 시도해 보시면 좋을거 같습니다

 

C#으로 구현하기 위해 간단한 예제를 같이 올려 드리니 분석 해서 나만의 차트를 구현해 보시기 바랍니다

 

[Souce Code]

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Diagnostics;



namespace MSChart_Controls_Test{
     public partial class Form1 : Form
     {
         Chart chart = null;

        public Form1()
        {
            InitializeComponent();

            ChartDataInput();
         }



        private void ChartDataInput()
        {
            //x,y축에 사용될 값을 먼저 준비 한다
            //x축 값
            string[] xValues1 = { "Korea", "Frence", "Canada", "Germany", "Italy" };

            //y축 값
            double[] yValues1 = { 67.66, 89.57, 82.44, 85.24, 87.93 };
            double[] yValues2 = { 77.66, 89.57, 92.44, 95.24, 97.93 };

            //차트를 변수에 담아주고
            chart = this.chart1;

            //계열을 초기화 처음에 Series1이 기본으로 들어가기 때문에 삭제해 준다
            chart.Series.Clear();

            //계열을 새로 생성해서
            Series s1 = new Series("international");
            Series s2 = new Series("International2");

            //계열을 추가해 준다
           chart.Series.Add(s1);
           chart.Series.Add(s2);

          //추가된 계열에 값을 넣어준다
          //x축 값은 하나만 있으면 되기 때문에 처음부터 데이터를 하나만 준비한다
          //만약 s2애 x축값도 만들어서 DataBindXY로 값을 넣어도 x축은 변경되지 않는다

          //한번설정하면 Y축은 값이 변경되어도 X축은 값이 변경되지 않는다
          s1.Points.DataBindXY(xValues1, yValues1);
          s2.Points.DataBindY(yValues2);

          //차트타입을 막대로 한다
          s1.ChartType = SeriesChartType.Column;

         //범례를 보여준다 
         chart.Legends[0].Enabled = true;

         //테두리선굵기 (선종류로 해야 차이가 나타난다)
         s1.BorderWidth = 12;

        //색 변경
        s1.Color = Color.OrangeRed;

        //계열에 값표시
        s1.IsValueShownAsLabel = true;

        //계열에 그라데이션을 준다
        s1.BackGradientStyle = GradientStyle.VerticalCenter;
        s2.BackGradientStyle = GradientStyle.Center;

       //아래 두줄을 풀변 상하 이중축이되고
       //s1.XAxisType = AxisType.Primary; //기본축
       //s2.XAxisType = AxisType.Secondary; //보조축

      //아래 두줄을 풀면 좌우 이중축이된다
      //s1.YAxisType = AxisType.Primary;
     //s2.YAxisType = AxisType.Secondary;

     //차트의 테두리선을 붉은색의 연결된 선으로 그리는데 선의 넓이는 1이다
     chart.BorderlineColor = Color.Red;
     chart.BorderlineDashStyle = ChartDashStyle.Solid;
     chart.BorderlineWidth = 1;

     //차트의 내부 테두리 선을 파란색의 연결된 선으로 그리는데 선의 넓이는 1이다
     chart.ChartAreas[0].BorderColor = Color.Blue;
     chart.ChartAreas[0].BorderDashStyle = ChartDashStyle.Solid;
     chart.ChartAreas[0].BorderWidth = 1;

     //차트의 내부 테두리 선을 변경
     chart.ChartAreas[0].AxisX.LineColor = Color.Blue;
     chart.ChartAreas[0].AxisY.LineColor = Color.Blue;
     //chart.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;
     //chart.ChartAreas[0].AxisY.Enabled = AxisEnabled.False;

     //차트의 배경 격자선을 변경
     chart.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.Blue;
     chart.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.Blue;
     chart.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
     chart.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;

     //차트의 외부로 삐져나온 선을 변경
     chart.ChartAreas[0].AxisX.MajorTickMark.LineColor = Color.Red;
     chart.ChartAreas[0].AxisY.MajorTickMark.LineColor = Color.Red;
     chart.ChartAreas[0].AxisX.MajorTickMark.Enabled = false;
     chart.ChartAreas[0].AxisY.MajorTickMark.Enabled = false;

      //첫번재 계열의 네번째 그래프만 파란색으로 변경
     s1.Points[4].Color = Color.Blue;
   }

private void ChartDataInput2()
    {
       //차트를 변수에 담아놓고
       chart = this.chart1;

       //계열도 변수에 담는다
       Series series1 = new Series("Test");
       Series series2 = new Series("Test2");

       //xValue를 준비
       string[] xValue = { "국어","영어","수학" };

       //계열을 초기화
       chart.Series.Clear();

       //계열을 추가
       chart.Series.Add(series1);
       chart.Series.Add(series2);

       //계열을 변수에 담지 않고 이렇게 바로 추가해도 된다

      //그러나 계열을 이렇게 선언하면 아래처럼 series1변수로 접근하지 못하고 chart.series[0] 또는

      //chart.series["Test"] 이렇게 접근해야 한다
       //chart.Series.Add("Test");
      //chart.Series.Add("Test2");

      //테두리선굵기 (선종류로 해야 차이가 나타난다)
      series1.BorderWidth = 12;

      //색 변경
      series1.Color = Color.OrangeRed;

      //차트 모양을 막대로 지정
      series1.ChartType = SeriesChartType.Column;
      series2.ChartType = SeriesChartType.Column;

      //테스트 계열에 값을 세개 추가
      series1.Points.AddY(21.7);
      series1.Points.AddY(20);
      series1.Points.AddY(18.5);

      //테스트2 계열에 값을 세개 추가
      series2.Points.AddY(22.4);
      series2.Points.AddY(19.2);
      series2.Points.AddY(23.8);
    }

     private void button1_Click(object sender, EventArgs e)
     {

        //차트를 변수에 담아놓고
       chart = this.chart1;

       //차트 모양을 꺽은선으로 변경
       if (chart.Series[0].ChartType == SeriesChartType.Column)
       {
           chart.Series[0].ChartType = SeriesChartType.FastLine;
           chart.Series[1].ChartType = SeriesChartType.FastLine;
        }
        else
        {
          chart.Series[0].ChartType = SeriesChartType.Column;
          chart.Series[1].ChartType = SeriesChartType.Column;
         }
     }

     private void button2_Click(object sender, EventArgs e)
     {
       //차트를 변수에 담아놓고
       chart = this.chart1;

        //원통형으로 변경
       chart.Series[1].CustomProperties = "DrawingStyle=Cylinder";

       //3D
       chart.ChartAreas[0].Area3DStyle.Enable3D = !(chart.ChartAreas[0].Area3DStyle.Enable3D);
     }

     private void button3_Click(object sender, EventArgs e)
     {
        //범례를 보여줬다가 안보여줬다가 한다
        this.chart1.Legends[0].Enabled = !(this.chart1.Legends[0].Enabled);
      }

      private void button4_Click(object sender, EventArgs e)
      {
        //첫번째 계열을 순환 하면서 가장 큰 계열의 색을 검은색으로 변경한다
        int point = 0;
        int yvalue = 0;

        for (int i = 0; i < this.chart1.Series[0].Points.Count; i++)
        {
            Debug.Print(this.chart1.Series[0].Points[i].YValues[0].ToString());
            if (yvalue < (int)this.chart1.Series[0].Points[i].YValues[0])
            {
                point = i;
                yvalue = (int)this.chart1.Series[0].Points[i].YValues[0];
             }
          }

        this.chart1.Series[0].Points[point].Color = Color.Black;
      }
    }
}

 

 

붙여넣기를 햇더니 코드가 많이 엉망이 됐네요ㅎㅎ

 

나중에 시간내서 정리하도록 하겠습니다~

 

그럼 코딩하는남자 였습니다~!

 

 

반응형
반응형

안녕하세요~

C# 프로그래밍을 연습 개발 하고 있는 코딩하는남자 입니다!!

 

이번에 연습해볼것은 QR코드 생성 인데요

왜 굳이 C#으로 QR코드를 생성해요? 라는 의구심이 드실거 같은데요

QR코드를 사용하여 활용할 곳이 생각보다 많다(?) 입니다ㅋㅋㅋ

굳이 예를 들면 인식이 필요한 프로그램 개발시

또는 자재관리, 재고관리, 재공관리, 물류관리, 편의점, 등

모든 물건을 다루는 곳에서 갯수, 금액 등을 관리하기 위한 인식코드로

많이 사용 할수 있을거 같네요

아 본문으로 돌아와서 C#에서 어떻게 문자열을 QR코드로 생성을 시키는지

보도록 하겠습니다

참고로 저도 인터넷 정보를 보고 연습을 하고 실전에 적용을 하는 입장이다 보니 검색을 통해 저보다 더 상세한 정보를 검색해 보실수 있으니 중복 검색은 필수 입니다

============================================

개발환경 : Visual Studio 2010 사용

QR코드 Generator DLL : 링크 참조

QR Code .NET Generator | Using free .NET sample to create QR Code barcodes

BizCode Generator for .NET Ultimate The most mature & flexible barcode SDK for Microsoft .NET Framework Quick Overviews Mature barcode creating SDK Support every .NET IDEs Support C#, VB.NET, etc. Dynamic barcodes support For all printers Overview QR Code More Barcode Tutorial C# Sample VB.NET S

www.businessrefinery.com

===============================================

준비가 되셨다면 차근 차근 이미지로 하나씩 따라 해볼까요?

 

1. QR코드 Generator DLL 다운로드 받기

: 링크를 통해 싸이트 접속 후 DOWNLOAD 버튼 클릭

어렵지 않아요

 

2. 비쥬얼 스튜디오에 참조 시키기

1) 다운로드 받은 파일 압축 풀기

※ 압축을 풀었을때 사진 입니다 처음에는 압축형식으로 되어 있어요~

 

 

2) 참조 DLL 찾기

압축을 풀면 다음과 같은 구조로 압축이 풀리게 되는데

저희가 사용할 DLL의 위치를 알려드릴께요~

천천히 그림파일을 참고해서 따라오세요~

 

 

3) 비쥬얼 스튜디오 DLL 참조 시키기

기본적인 비쥬얼 스튜디오에 DLL참조하는 방법은

아마 다들 아실꺼라고 생각하고 대충 넘어가겠습니다

절대 귀찮아서가 아닙니다!!

비쥬얼 스튜디오에 DLL을 첨부 완료되고 난 뒤에 화면 입니다

자 이제 거의 끝나가요~ 별거 없죠?ㅋ

이제 소스 코드로 넘어갈건데요

간단합니다 7줄이면 끝이에요~

참 쉬죠잉~ㅋㅋㅋ

 

 

4) 소스 작성하기

참조시킨 DLL 사용을 위해 참조선언을 먼저 작성해 주세요

사용하실려는 페이지의 제일 상단에 아래와 같이 using문을 작성해주시고요~

 

그다음 아래와 같이 QR코드를 생성할 소스 코드를 입력합니다

참고로 저는 이미지로 보이지 않고 Bitmap으로 전환하여 레포트 툴과 연동 시킬 예정입니다

만약 이미지로 만드실 경우 맨 아래 쪽 구문의 주석을 바꿔주시면 됩니다

QRCode barcode = new QRCode(); string url = pFIELD[22, 3]; barcode.Code = url; barcode.ModuleSize = 6.0f; barcode.Resolution = 300; //이미지로 저장 //barcode.drawBarcode2ImageFile("Temp.png"); //Bitmap으로 전환하여 사용 var barcodebitmap = (Bitmap)barcode.drawBarcodeOnBitmap();

이미지로 표시 할 경우는 위의 구문으로 처리가 완료가 되고 이벤트를 주셔서 사용하시면 Debug폴더 안에 이미지로 생성이 됩니다

 

참고로 저는 레포트툴과 연동을 하기 위해 하나의 구문이 더 필요한데

아래의 구문은 어떤 레포트툴을 사용하시는냐에 따라 달라지기 때문에 참고만 하시기 바랍니다

ARViewer21.Document.Pages[ThisPage].DrawImage(barcodebitmap, false, LSHIFT + ExTTI(1400), PTM + ExTTI(7430), ExTTI(500), ExTTI(420));

네 이상으로 C#을 이용해 QR코드 생성하는 예제였습니다!

글로 이해 안되실분들을 위해서 영상 제작을 해보았습니다

글과 영상을 통해 QR코드를 만들어 나만의 프로그램을 제작해보시는건 어떨까요?ㅎㅎ

이상 코딩하는남자 였습니다!!

반응형

+ Recent posts