2014년 11월 9일 일요일

2010년도 VB.NET 기초 과정 보조 교재를 개편하면서 추가된 예제입니다.

2010년도 VB.NET 기초 과정 보조 교재를 개편하면서 추가된 예제이다.
 조회 : 325
나의 폴더 > VB.NET | 2010-06-02 (Wed) 17:31http://blog.dreamwiz.com/papasmf1/12854648
아무래도 실습 내용을 부족한 부분이 있어서 예제를 몇가지 추가했다. 
부록 : ADO.NET 활용을 위한 예제


1. 비주얼 스튜디오 2008을 실행해서 파일”=> “새로 만들기” => “프로젝트에서 “Windows Forms 응용프로그램템플릿을 선택한다프로젝트 이름은 “demoADONET”을 입력하고 위치는 “c:\work”를 입력하고확인버튼을 클릭한다.

2. Form1.vb 에 아래와 같이 컨트롤을 추가한다.

수업에서 샘플로 제공된 Northwind 데이터베이스에 있는 Categories 테이블을 사용하도록 한다. categoryID(분류ID), categoryName(분류명), description(설명)을 입출력 하는 화면을 작성하도록 한다. Label 컨트롤 3개와 TextBox 컨트롤 3, Button 컨트롤 1, DataGridView 컨트롤 1개를 사용해서 화면을 위와 같이 구성한다컨트롤의 속성중에 아래의 도표이 있는 내용과 같이 Text속성을 변경한다.

컨트롤명
속성
입력할 내용
Label1
Text
분류ID:
Label2
Text
분류명:
Label2
Text
설 명:
Button1
Text
검색
Button2
Text
입력
Button3
Text
수정
Button4
Text
삭제
Form1
Text
분류 데이터

3. 솔루션 탐색기에서 프로젝트 명을 선택한 상태에서 마우스 오른쪽 버튼을 클릭해서 추가” => “클래스를 클릭한다이름에 “Categories”를 입력하고 추가 버튼을 클릭한다.

Categories.vb 클래스 파일에 다음과 같은 코드를 입력한다.
[VB.NET ? Categories.vb]
Imports System.Data
Imports System.Data.SqlClient

Public Class Categories
    Private Const strConn As String = "server=(local)\sqlExpress;" & _
        "database=Northwind;uid=sa;pwd=1234"
    Private conn As New SqlConnection()

    Public Sub New()
        conn.ConnectionString = strConn
    End Sub

Public Function SelectAllMethod() As DataSet
        '//이부분에Categories 테이블에서데이터를가져오는코드
        Dim ds As New DataSet("northwind")
        Dim daCate As New SqlDataAdapter("SELECT categoryID, " & _
            "categoryName, description FROM categories", conn)
        daCate.Fill(ds, "Categories")
        Return ds
    End Function

Public Function SelectMethod(ByVal categoryID As Integer) As DataRow
        '//이부분에Categories 테이블에서데이터를가져오는코드
        Dim ds As New DataSet("northwind")
        Dim daCate As New SqlDataAdapter( _
           "SELECT categoryID, categoryName, desciption FROM categories " & _
           "WHERE categoryID=@id", conn)
        daCate.SelectCommand.Parameters.AddWithValue("@id", categoryID)
        daCate.Fill(ds, "Categories")
        Return ds.Tables(0).Rows(0)
    End Function

    Public Function InsertMethod(ByVal categoryName As String, _
        ByVal description As String) As Integer

        '//Update 기능을수행하는코드작성
        Dim cmd = New SqlCommand()
        Dim sql As String = "Insert Into Categories(categoryName," & _
            "description) values(@categoryName, @description)"
        cmd.Connection = conn
        cmd.CommandText = sql
        cmd.CommandType = CommandType.Text
        cmd.Parameters.AddWithValue("@categoryName", categoryName)
        cmd.Parameters.AddWithValue("@description", description)
        conn.Open()
        Dim iRtn As Integer
        iRtn = cmd.ExecuteNonQuery()

conn.Close()

        Return iRtn

    End Function

    Public Function UpdateMethod(ByVal categoryID As Integer, _
        ByVal categoryName As String, _
        ByVal description As String) As Integer
        '//Update 기능을수행하는코드작성
        Dim cmd = New SqlCommand()
        Dim sql = "Update Categories set categoryName=" & _
            "@categoryName, description=@description " & _
            "where categoryID=@categoryID"
        cmd.Connection = conn
        cmd.CommandText = sql
        cmd.Parameters.AddWithValue("@categoryID", categoryID)
        cmd.Parameters.AddWithValue("@categoryName", categoryName)
        cmd.Parameters.AddWithValue("@description", description)
        cmd.CommandType = CommandType.Text
        conn.Open()
        Dim iRtn As Integer
        iRtn = cmd.ExecuteNonQuery()
        conn.Close()

        Return iRtn

    End Function

    Public Function DeleteMethod(ByVal categoryID As Integer) As Integer
        '//Delete 기능을수행하는코드작성    
        Dim cmd = New SqlCommand()
        Dim sql As String = "Delete Categories where categoryID=@categoryID"
        cmd.Connection = conn
cmd.CommandText = sql



cmd.CommandType = CommandType.Text
        cmd.Parameters.AddWithValue("@categoryID", categoryID)
        conn.Open()
        Dim iRtn As Integer
        iRtn = cmd.ExecuteNonQuery()
        conn.Close()

        Return iRtn

    End Function

End Class

[C# - Categories.cs]
using System;
using System.Data;
using System.Data.SqlClient;

public class Categories
{
    private SqlConnection conn = new SqlConnection();

    public Categories()
    {
        conn.ConnectionString =
            @"server=(local)\sqlExpress;database=Northwind;uid=sa;pwd=1234";
    }

    public DataSet SelectAllMethod()
    {
        //이부분에 Categories 테이블에서 데이터를 가져오는 코드
        SqlDataAdapter daCate = new SqlDataAdapter(
            "Select categoryID, categoryName, description From Categories",
            conn);
        DataSet ds = new DataSet("northwind");

daCate.SelectCommand.CommandText = string.Format(
            "SELECT categoryID, categoryName, description FROM categories ");
        daCate.Fill(ds, "Categories");
        return ds;
    }

public DataRow SelectMethod(int categoryID)
    {
        SqlDataAdapter daCate = new SqlDataAdapter(
            "SELECT categoryID, categoryName, desciption FROM categories " +
           "WHERE categoryID=@id", conn);
        daCate.SelectCommand.Parameters.AddWithValue("@id", categoryID);
        DataSet ds = new DataSet("northwind");
        daCate.Fill(ds, "Categories");
        return ds.Tables[0].Rows[0];
    }

    public int InsertMethod(string categoryName, string description)
    {
        //Update 기능을 수행하는 코드 작성
        SqlCommand cmd = new SqlCommand();
        string sql = "Insert Into Categories(categoryName,"
            + "description) values(@categoryName, @description)";
        cmd.Connection = conn;
        cmd.CommandText = sql;
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@categoryName", categoryName);
        cmd.Parameters.AddWithValue("@description", description);
        conn.Open();
        int iRtn = cmd.ExecuteNonQuery();
        conn.Close();

        return iRtn;
}


public int UpdateMethod(int categoryID, string categoryName, string description)
    {
        //Update 기능을 수행하는 코드 작성
        SqlCommand cmd = new SqlCommand();
        string sql = "Update Categories set categoryName=@categoryName,"
            + "description=@description "
            + "where categoryID=@categoryID";
        cmd.Connection = conn;
        cmd.CommandText = sql;
        cmd.Parameters.AddWithValue("@categoryID", categoryID);
        cmd.Parameters.AddWithValue("@categoryName", categoryName);
        cmd.Parameters.AddWithValue("@description", description);
        cmd.CommandType = CommandType.Text;
        conn.Open();
        int iRtn = cmd.ExecuteNonQuery();
        conn.Close();

        return iRtn;

    }
    public int DeleteMethod(int categoryID)
    {
        //Delete 기능을 수행하는 코드 작성  
        SqlCommand cmd = new SqlCommand();
        string sql = "Delete Categories where categoryID=@categoryID";
        cmd.Connection = conn;
        cmd.CommandText = sql;
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@categoryID", categoryID);
        conn.Open();
        int iRtn = cmd.ExecuteNonQuery();
        conn.Close();
return iRtn;
    }
}

4. Form1.vb파일에 각 버튼의 클릭 이벤트를 생성한다각 버튼을 더블 클릭해서 이벤트 핸들러를 생성한다. DataGridView1 컨트롤의 경우 속성 창에서 이벤트 리스트 중에 “CellDoubleClick”를 찾아서 해당 이벤트 명을 더블클릭 하면 이벤트 핸들러가 생성된다.


5. Form1.vb 파일에서 마우스 오른쪽 버튼을 클릭해서 코드 보기를 클릭한다각 버튼의 클릭 이벤트 핸들러에 아래의 코드를 입력한다.  

[VB.NET ? Form1.vb]
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
        DisplayUI()
    End Sub

    Private Sub DisplayUI()
        Dim ds As DataSet
        Dim objCate As New Categories()
        ds = objCate.SelectAllMethod()
        DataGridView1.DataSource = ds.Tables(0)
    End Sub

Private Sub Button2_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click
Dim objCate As New Categories
        Dim result As Integer

        If (String.IsNullOrEmpty(TextBox2.Text) And _
            String.IsNullOrEmpty(TextBox3.Text)) Then
            MessageBox.Show("입력할 분류명과 설명이 필요합니다.")
            Return
        End If

        result = objCate.InsertMethod(TextBox2.Text.Trim(), _
            TextBox3.Text.Trim())

        If (result > 0) Then
            MessageBox.Show("입력 성공!")
            DisplayUI()
        End If

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button3.Click

        '수정할 경우
        Dim objCate As New Categories
        Dim result As Integer

        If (String.IsNullOrEmpty(TextBox1.Text) And _
            String.IsNullOrEmpty(TextBox2.Text) And _
            String.IsNullOrEmpty(TextBox3.Text)) Then
            MessageBox.Show("수정할 분류ID, 이름설명이 필요합니다.")
            Return
        End If

result = objCate.UpdateMethod( _
            CType(TextBox1.Text.Trim(), Integer), _
            TextBox2.Text.Trim(), TextBox3.Text.Trim())

If (result > 0) Then
            MessageBox.Show("수정 성공!")
            DisplayUI()
        End If

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button4.Click

        '삭제할(경우)
        Dim objCate As New Categories
        Dim result As Integer

        If (String.IsNullOrEmpty(TextBox1.Text.Trim())) Then
            MessageBox.Show("삭제할 분류ID가 필요합니다.")
            Return
        End If

        result = objCate.DeleteMethod(CType(TextBox1.Text.Trim(), Integer))

        If (result > 0) Then
            MessageBox.Show("삭제 성공!")
            DisplayUI()
        End If

    End Sub

    Private Sub DataGridView1_CellDoubleClick(ByVal sender As System.Object, _
       ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) _
       Handles DataGridView1.CellDoubleClick
'데이터 복사
        Dim row As DataGridViewRow
        '현재 선택한 행 지정
        row = DataGridView1.Rows(e.RowIndex)

TextBox1.Text = row.Cells(0).Value.ToString()
        TextBox2.Text = row.Cells(1).Value.ToString()
        TextBox3.Text = row.Cells(2).Value.ToString()

    End Sub
End Class

[C# - Form1.cs]
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;

namespace demoADONETCS
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void DisplayUI() {
            DataSet ds;
            Categories objCate  = new Categories();
            ds = objCate.SelectAllMethod();
            DataGridView1.DataSource = ds.Tables[0];
        }

        private void Button1_Click(object sender, EventArgs e)
{   //검색
            DisplayUI();
}

        private void Button2_Click(object sender, EventArgs e)
        {   //입력
            Categories objCate  = new Categories();
            int result;

            if (String.IsNullOrEmpty(TextBox2.Text) &&
                String.IsNullOrEmpty(TextBox3.Text)) {
                MessageBox.Show("입력할 분류명과 설명이 필요합니다.");
                return;
            }

            result = objCate.InsertMethod(TextBox2.Text.Trim(),
                TextBox3.Text.Trim());

            if (result > 0) {
                MessageBox.Show("입력 성공!");
                DisplayUI();
            }
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            //수정할 경우
            Categories objCate  = new Categories();
            int result;

            if (String.IsNullOrEmpty(TextBox1.Text) &&
                String.IsNullOrEmpty(TextBox2.Text) &&
                String.IsNullOrEmpty(TextBox3.Text)) {
                MessageBox.Show("수정할 분류ID, 이름설명이 필요합니다.");
                return;
            }

result = objCate.UpdateMethod(
Convert.ToInt32(TextBox1.Text.Trim()),
            TextBox2.Text.Trim(), TextBox3.Text.Trim());

            if (result > 0) {
                MessageBox.Show("수정 성공!");
                DisplayUI();
            }
        }

        private void Button4_Click(object sender, EventArgs e)
        {
             //삭제할(경우)
             Categories objCate  = new Categories();
             int result;

            if (String.IsNullOrEmpty(TextBox1.Text.Trim())) {
                MessageBox.Show("삭제할 분류ID가 필요합니다.");
                return;
            }

            result = objCate.DeleteMethod(
                Convert.ToInt32(TextBox1.Text.Trim()));

            if (result > 0) {
                MessageBox.Show("삭제 성공!");
                DisplayUI();
            }
        }

        private void DataGridView1_CellDoubleClick(object sender,
            DataGridViewCellEventArgs e)
        {
//데이터 복사
            DataGridViewRow row;
            //현재 선택한 행 지정
            row = DataGridView1.Rows[e.RowIndex];
TextBox1.Text = row.Cells[0].Value.ToString();
            TextBox2.Text = row.Cells[1].Value.ToString();
            TextBox3.Text = row.Cells[2].Value.ToString();
        }
    }
}

6. DataGridView1의 디자인을 수정해야 한다. Form1에 있는 DataGridView1을 선택해서 마우스 오른쪽 버튼을 클릭해서 열 편집을 클릭한다열 편집 창에서 왼쪽 하단에 있는 추가버튼을 클릭한다.  


열 추가 창에서는 바인딩되지 않은 열이 선택되어 있는데 이름에 “categoryID”를 입력하고 머리글 텍스트에 분류ID”를 입력한다하단에 있는 추가 버튼을 클릭한다. 2개의 컬럼을 더 추가해야 하기 때문에 다시 열 추가 창에서 이름에 “categoryName”을 입력하고 머리글 텍스트에 분류명을 입력하고 추가 버튼을 클릭한다다시 열 추가 창에서 이름에 “description”을 입력하고 머리글 텍스트에 설명을 입력하고 추가 버튼을 클릭하고 닫기 버튼을 클릭해서 열 추가 창을 닫는다.


7. 프로젝트를 빌드하고 실행하면 다음과 같은 실행 결과를 확인할 수 있다입력과 수정삭제도 잘 실행되는지 살펴보도록 한다.

댓글 없음:

댓글 쓰기

참고: 블로그의 회원만 댓글을 작성할 수 있습니다.

5월 14일 새벽에 chatGPT 4o가 발표되었습니다. 옵티마이즈, 옴니라는 의미인데 실시간 통역, 다자간 회의, 멀티모달 기능의 강화등이 보이네요.

  초격차로 OpenAI진영이 다시 앞서가는 모양을 보여주고 있습니다. 저도 새벽에 일어나자 마자 올라온 영상들과 글을 정리하고 있습니다. ㅎㅎ 영화 HER의 사진이 새벽에 많이 올라왔었는데 저도 안본 영화입니다. 주말에 한번 봐야 할 것 같습니다....