Form1 에서 사용할 폼 클래스를 선언하고, 사용할 파라미터를 넘겨줌

여기서 m_dicdeviceInfo는 Form2에서 일을 하고 변경된 내용물을 적용하여 Form1로 다시 가져올 객체이고, selectedIP는 Form2에서 일을 하기 위해 필요한 데이터이다. 


ref를 이용하여 Form2 에서 객체를 변경해도 적용 될 수 있도록 하는 역할

(주소 자체를 넘기기 때문에 내용물이 변해도 적용 될 수 있도록 함)



<<Form1>>

1
NetworkInfo networkinfo = new NetworkInfo(ref m_dicdeviceInfo, selectedIP);
cs


Form2 에서 생성자를 위와 같은 파라미터로 받음

Form2에서 쓸 전역변수를 생성하고, 파라미터로 받은 부분을 적용시켜줌


<<Form2>>

1
2
3
4
5
6
7
8
Dictionary<string, DeviceInfo> m_dicdeviceInfo = new Dictionary<string, DeviceInfo>();
string m_SelectedIP;
 
public NetworkInfo(ref Dictionary<string, DeviceInfo> main_dicdeviceInfo, string ip)
{
    m_SelectedIP = ip;
    m_dicdeviceInfo = main_dicdeviceInfo;
}
cs



이렇게 사용하면 되고, Form2 에서 m_dicdeviceInfo를 변경하면 Form1에도 적용이 되는 것을 볼 수 있다.


이런식으로 왔다 갔다 사용하면 된다!

반드시 폼 간에 왔다갔다할 객체들은 public으로 선언하는것이 좋다.

'프로그래밍 > C#' 카테고리의 다른 글

C# 문자열 자르기 substring / Trim  (0) 2017.04.20
C# 소문자 대문자 변환  (0) 2017.04.20
C# 엔터를 이용하여 로그인하기  (0) 2017.04.13
C# string to uint  (0) 2017.04.03
C# 프로세스 죽이기  (0) 2017.03.22
1
2
3
4
5
6
7
private void TB_PW_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == '\r')
    {
        Btn_Login_Click(sender, e);
    }
}
cs



TB_PW_KeyPress는 TB_PW(텍스트박스)의 이벤트함수이다.

Btn_Login_Click(sender, e)는 로그인 버튼이다.

엔터를 눌렀을 때, 로그인 버튼을 누른 효과를 준다.

'프로그래밍 > C#' 카테고리의 다른 글

C# 소문자 대문자 변환  (0) 2017.04.20
C# 폼과 폼간의 객체 사용  (0) 2017.04.19
C# string to uint  (0) 2017.04.03
C# 프로세스 죽이기  (0) 2017.03.22
C# 공백 기준으로 문자열 자르기  (0) 2017.03.14

string 을 uint 로 변환하는 방법


여기서 subnet 은 string 이며, stdata.netmask 는 uint 형이다.


예제)

stdata.netmask = BitConverter.ToUInt32(IPAddress.Parse(subnet).GetAddressBytes(), 0);

위엣건 IP 주소를 사용했을 때의 예제이고

아마..


int i = 0;

string str = BitConverter.ToUInt32(i);


이 아닐듯 싶다



'프로그래밍 > C#' 카테고리의 다른 글

C# 폼과 폼간의 객체 사용  (0) 2017.04.19
C# 엔터를 이용하여 로그인하기  (0) 2017.04.13
C# 프로세스 죽이기  (0) 2017.03.22
C# 공백 기준으로 문자열 자르기  (0) 2017.03.14
C# 프로세스 숨기는 방법  (0) 2017.03.10

C# Process Kill 하기


1
2
3
4
5
6
7
8
9
10
11
 
private static void killps(string processName)
        {
            Process[] process = Process.GetProcessesByName(processName);
            Process currentProcess = Process.GetCurrentProcess();
            foreach (Process p in process)
            {
                if (p.Id != currentProcess.Id)
                    p.Kill();
            }
        }

cs

위의 코드는 현재 프로세스가 살아 있다면 그 프로세스를 죽이는 코드


출처 : http://www.hoons.net/Board/cshaptip/Content/27137

어떤 문자를 기준으로 문자열 자르는 방법

Split라는 내장 함수를 이용하면 됨


1
2
3
4
5
6
7
8
9
10
11
12
13
14
string str = "hi nice to meet you";
string[] hello = str.Split('\x020');
 
// string[] hello = str.Split(' '); 
// 위의 코드로 해도 상관은 없지만 종종 안먹는 경우가 있다고 함
// 꼭 공백이 아니더라도 / 나 * 이나 등등 여러 문자들로 
//나눌 수 있음
 
//예상 결과
//hello[0] = "hi"
//hello[1] = "nice"
//hello[2] = "to"
//hello[3] = "meet"
//hello[4] = "you"
 
cs


정규식의 문자 이스케이프 참고 MSDN : 

https://msdn.microsoft.com/ko-kr/library/4edbef7e(v=vs.110).aspx



C# 공백 이스케이프 시퀀스 C# 공백 나누기

C# 에서 연결 프로세스를 실행시키지만 그 연결된 프로세스는 숨기고 싶을때 사용하는 방법


1
2
3
ProcessStartInfo startInfo = new ProcessStartInfo(strFileName);
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);
cs


출처 : http://stackoverflow.com/questions/2317767/c-process-start-hide


리스트뷰와 검색할 키워드, 그리고 시작 위치를 받아와서 검색하여 리스트뷰 아이템을 반환해주는 함수


1
2
3
4
5
6
7
8
9
10
private ListViewItem FindItem(ListView listview, string keyword, int startIndex)
        {
            for (int i = startIndex; i < listview.Items.Count; i++)
            {
                ListViewItem item = listview.Items[i];
                bool isContains = item.SubItems[1].Text.Contains(keyword);
                if (isContains) { return item; }
            }
            return null;
        }
cs


리스트뷰가 여러개여서 한개로 사용하려고 찾은 소스에서 리스트뷰를 추가하였다.


참고글 : http://www.hoons.net/board/qacshap/content/18382

Value 값은 알고있는데 이를 이용하여 Key값을 찾는 방법


1
2
long key = IPCollection.FirstOrDefault(x => x.Value == ip1).Key;
IPCollection.Remove(key);
cs


이렇게 사용하면 된다.

여기서 IPCollection은 Dictionary이고, ip1은 Dictionary의 value값이다.


과장님께서 이렇게 하느니..차라리

ElementAt(i) 를 이용하여 하는게 더 효율적이지 않느냐고 알려주셨다..

사실 ElementAt()을 몰라서 저렇게 한 거긴 하다..ㅎㅎㅎ;;

리스트뷰 다중 선택을 했을 때 체크박스가 하나 누락되는 현상이 나온다.

이는 팀장님께서 원인을 알려주셨는데, 

 "아이템을 클릭했을때 체크박스가 선택되는 거랑(선택 시 true), 쉬프트 눌러서 다중 선택 했을때 체크박스가 선택되는거(앞서 체킹되었던 true 에서 false 로 바뀜)랑 이중으로 선택이 되었기 때문에 체크박스가 마지막 클릭하는 하나가 누락되는 현상이 벌어지는 것"이라고 알려주셨다..


클릭 이벤트를 직접 들어가서 오버로딩을 하든지, 코드를 바꾸든지 해야될 것 같다고 생각했지만.. 어떻게하는건지 난 씨샵 초보이기 때문에...

그냥 클릭을 했을때 체크가 되는 현상을 무효화 시키고, 다시 원하는 부분만 체크 시키는 방법으로 생각을 바꿨다.


클릭 했을 때 체크가 되는 현상을 무효화 시키는 방법은 다른 글에 기재해놓았다


여기 <<  로 들어가서 확인해보면 된다!


위와 같이 선택시 체킹되는것을 무효화 한 다음 다음과 같이 작성하면 된다.


리스트뷰의 이벤트 속성인 ItemChecked를 이용했다.

ItemChecked는 아이템이 체킹될때마다 발생하는 이벤트이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
    // 멀티셀렉을 했을 때 체킹 상태를 저장하기 위해 사용. 나머지들도 처음 체킹한걸로 바꿔야하니까..
    bool isfirst = true
   
    // 처음 체킹한 상태를 나머지들에게도 적용하기 위함
    bool listViewCurrentCheck = false
 
    int cnt = listView1.Items.Count;
    ListViewItem lvi = new ListViewItem();
    for (int i = 0; i < cnt; i++)
    {
        lvi = listView1.Items[i];
    
       //멀티셀렉한 부분이 아닌 곳에서 단일 체킹을 하게 되면, 멀티셀렉한 부분이 해제되도록 함
        if(e.Item.Selected == false)
        {
            lvi.Selected = false
        }
        else
        {
            if (lvi.Selected == true)
            {
            // 체킹한 곳의 상태를 저장 (지금상태가 true 인지 false인지)
            if (isfirst == true
            {
                lvi.Checked = e.Item.Checked;
                listViewCurrentCheck = lvi.Checked;
                isfirst = false;
            }
 
             //위의 저장을 다른 멀티 셀렉된 아이템들에게도 적용
            else 
            {
                lvi.Checked = listViewCurrentCheck;
            }
        }
    
    }
                
}
cs


ㅠㅠ 이거 생각한다고 하루를 삽질했따....삽삽삽삽


MultiSelecte CheckBox Check , 체크박스 하나 누락 , 리스트뷰 체크박스 버그 , 리스트뷰 체크박스 하나 선택이 안됌

갑자기 Debug 출력창에 로그찍는게 생각이 안나서... 적어놔야지


Debug.WriteLine("입력!!");


만약 Debug가 색깔이 변하지 않거나 없다고 존재하면 Using을 지워버린것이다....

Using 정리한다고 필요없는 Using을 삭제해서.....ㅎ....

그럴땐


using System.Diagnostics;


를 추가하면 된당!

리스트뷰 아이템 옆에 있는 체크박스가 아이템을 더블클릭 혹은 클릭시 체킹이 되는 문제!!!

또, Shift 키나 Ctrl 키를 함께 눌러서 사용했을 때 체킹이 이상하게 되는 문제를 해결하는 방법


그냥 아예..선택만 되고 체킹이 안됐으면 좋겠따....생각해서 찾아보았다



private bool inhibitAutoCheck;

private void listView1_MouseDown(object sender, MouseEventArgs e) {
    inhibitAutoCheck = true;
}

private void listView1_MouseUp(object sender, MouseEventArgs e) {
    inhibitAutoCheck = false;
}

private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) {
    if (inhibitAutoCheck)
        e.NewValue = e.CurrentValue;
}

이렇게 작성해주면 선택만 되고, 체크박스에 체킹이 안된다!!!!!!


When clicking:

  1. MouseDown <------------- inhibited region
  2. Click
  3. MouseClick
  4. MouseUp ------------->
  5. ItemCheck (outside inhibited region)
  6. ItemChecked

When double clicking:

  1. MouseDown <------------- inhibited region
  2. ItemSelectionChanged
  3. SelectedIndexChanged
  4. Click
  5. MouseClick
  6. MouseUp ------------->
  7. MouseDown <------------- inhibited region
  8. ItemCheck (inside inhibited region)
  9. ItemActivate
  10. DoubleClick
  11. MouseDoubleClick
  12. MouseUp ------------->

이러한 원리라는데.. 그냥 누가더 우선순위인가 이런문제인것 같다



이제ㅠㅠ 선택된 아이템들을 체킹할수 있는 방법을 생각하러가야지...

한국사이트에서 아무도 이야기 안해놓길래.. 해외사이트 검색 안하는사람을 위해!!!!

MultiSelect Remove할 때 주의할 점이 있다!

반드시 역순으로 삭제를 해야한다....

 

리스트뷰에서 ListView.SelectedItems[0] 이면 리스트뷰에서 여러 개 선택한 개수 중에 맨 위에 선택한 곳의 index의 주소값이 ListView.SelectedItems[0] 안에 들어가는 것!!!!!!!

 

그렇기 때문에 순차적으로 1,3번째삭제를 하게 되면 (1은 0번째!)

0번째 -- 1

1번째 -- 2  << 삭제를 하면

2번째 -- 3

3번째 -- 4  << 다음 삭제 예정

4번째 -- 5

 

==삭제 후 ListView 인덱스 갱신==

0번째 -- 1

1번째 -- 3

2번째 -- 

3번째 -- 5  << 여기가 3번째가 되어버림


가 되는데 listView의 인덱스는 변경이 되었지만, listView.SelectedIndeces의 인덱스는 변경되지 않고 그대로 3번째인 5가 삭제가 되어버리는 현상이 나타나게 된다. 나는 4를 삭제하고 싶었는데..오더가 잘못 되게 되는 것이다.

따라서 역순으로 삭제를 하게 되면 위와 같은 현상은 발생하지 않게 되는 것이다. 역순으로 삭제를 해버리면 인덱스가 다시 고쳐져도 위의 인덱스는 영향을 받지 않기 때문!!!

따라서 반드시 다중 삭제를 할 때는 역순으로 삭제해야 한당


따라서 예제코드를보면 


int cnt = listView1.SelectedItems.Count;

for (int i =  cnt-1 ; i >= 0; i--)

{

listView1.Items.Remove(listView1.SelectedItems[i]);

}


이렇게 삭제를 하면 된다!

리스트뷰 컬럼헤더 안보이게 아이템 한줄로 나열


private void SetListView(ListView listview)

{

listview.View = View.Details;

listview.HeaderStyle = ColumnHeaderStyle.None;

ColumnHeader h = new ColumnHeader();

h.Width = listview.ClientSize.Width - SystemInformation.VerticalScrollBarWidth;

  listview.Columns.Add(h); 

}


이거 추가해서 폼의 생성자 부분이나 Load부분에 함수로 넣으면 됌!

사실 리스트뷰가 하나면 listView1.~~~ 이렇게 해도 되는데..

나는 리스트뷰가 하나 이상이라 일일히 쳐줄려면 코드가 길어지길래 함수로 뺀것

하나만 있으면 생성자 부분에 저 SetListView 함수속 코드를 때려박아도 무방!

딕셔너리에서 키 뭉치 가져오는법


List<string> keyList = new List<string>(this.yourDictionary.Keys);

아무리 딕셔너리에서 한방으로 가져오려해도 ㅠㅠ 방법을 찾을수가없다..

한방에 가져올 수 있는 방법 아시는분 댓글점..


출처 : http://stackoverflow.com/questions/1276763/how-do-i-get-the-list-of-keys-in-a-dictionary



int로 다 계산하지 못하는 숫자 (21억 어쩌고 하는 그 숫자, int의 최댓값)

를 계산하려면 BigInteger를 사용하면 된다.

.Net 4.0부터 도입된 부분이며

BigInteger를 사용하기 위해서는 반드시 System.Numerics.dll에 대한 참조 추가를 해줘야 하며

System.Numerics를 using해 줘야 한다.


BigInteger는 일반 정수처럼 사용할 수 있고, 구조체 내부에 정의된 함수를 이용해서도 다양한 연산을 할 수 있다고 한다.


BigInteger구조체 MSDM : 


https://msdn.microsoft.com/ko-kr/library/system.numerics.biginteger(v=vs.110).aspx


참고 : 

http://slaner.tistory.com/105

리스트뷰가 꽉차면 가로 스크롤이 생겨나면서 오른쪽으로 아이템이 쭉 생겨나는 현상


이 현상에서 세로로 아이템이 나타나도록 하는 방법


listView1.View = View.Details;

listView1.HeaderStyle = ColumnHeaderStyle.None; 

ColumnHeader h = new ColumnHeader (); 

h.Width = listView1.ClientSize.Width -SystemInformation.VerticalScrollBarWidth;

listView1.Columns.Add (h); 


폼 생성자나 ListView 관련 함수에 위의 소스를 추가하면 된다..

위의 소스는 헤더컬럼을 하나 만든 뒤 숨김을 하는 코드이다.


리스트뷰에 헤더컬럼을 하나라도 추가하지 않으면 세로로 아이템이 나타나지 않는 것 같다...


출처 : http://stackoverflow.com/questions/6923424/c-sharp-listview-vertical-scroll


==========

좀 시간지나서 생각해봤는데..
한줄에 하나씩 뿌려주는건 Details뷰 이고 , List뷰는 말그대로 리스트였나보다..


'프로그래밍 > C#' 카테고리의 다른 글

C# Dictionary 에서 KeyCollection 가져오는 법  (0) 2017.02.08
[C#] BigInteger  (0) 2017.02.03
[C#]DLL 사용하기  (0) 2016.10.11
[C#]DLL 만들기  (0) 2016.10.11
[C#] 폼 넘기기  (0) 2014.08.28

DLL 사용하는 방법을 정리해놓는다.


먼저 


새 프로젝트 >> Visual C# >> Windows Form 응용 프로그램 을 만든다. 



현 프로젝트의 참조에서 오른쪽 클릭을 하여 참조추가를 한다. 




찾아보기를 클릭하여 만든 dll 파일을 선택하여 추가 버튼을 누른다.



dll 파일이 불러와졌는지 확인한 후 확인 버튼을 누른다.



참조에 DLLMAKE 라고 추가한 dll 파일이 있는것을 확인할 수 있다.



그 뒤 소스코드 맨 상단에 using 내dll파일이름; 을 이용하여 연결시켜준 뒤, 아래의 위치에 클래스 이름으로 한번 더 연결시켜 준다.  (그림 소스 참조)


DM(내가만든 DLLMAKE의 클래스이름) DLLTEST(변수이름) = new DM(내가만든DLLMAKE의 클래스 이름) ();


이렇게 써주면 된다.


이용방법은 아래 메서드와 같이 


DLLTEST(위의 클래스변수이름).TestSum(DLLMAKE에서 만든 메서드 이름)(파라미터들 적용).Tostring(textBox에 나타내주기위함)


이다.



결과화면은 다음과 같다.



수식기호는 생략하였다. 1+2 = 3 이란 결과이다.


끝!

'프로그래밍 > C#' 카테고리의 다른 글

[C#] BigInteger  (0) 2017.02.03
[C#] ListView 가로 스크롤 세로 스크롤로 바꾸기  (0) 2017.02.03
[C#]DLL 만들기  (0) 2016.10.11
[C#] 폼 넘기기  (0) 2014.08.28
[C#]C# 과 오라클 데이터베이스 연동 방법  (1) 2014.08.28

캡스톤을 하던 중 DLL 이용을 하고싶어져서 DLL을 만드는법과 DLL 사용하는법을 찾아보았다.

너무 정리가 잘 되어있는 분의 글을 읽고 나도 정리하고 싶어져서 글을 써논다.

그분의 글중 그림이 안보이는 부분도 있고..


먼저 DLL 만드는 부분이다.



새 프로젝트 >> Visual C# >> 클래스 라이브러리 를 선택 후 적당한 이름을 지어준 후 확인버튼을 누른다.


클래스의 이름을 원하는 이름으로 바꿔준다. (나중에 쓸 때 가독성을 높이기 위함인 듯 하다)




위의 "예" 버튼을 눌러 모든 참조의 이름도 바꿔야한다!


다음으로 아래와 같이 원하는 함수를 작성한 뒤 빌드를 한다.

여기서 컴파일이 아니라 빌드를 해야한다! 컴파일을 하면 dll 파일은 실행파일이 아니기때문에 해당 파일을 열수 없다는 뉘앙스로 오류가 나게 된다.




이렇게 빌드를 한 뒤 Debug 파일에 들어가서 확인해보면 dll 파일이 생성된 것을 볼 수 있다.




쨘!

'프로그래밍 > C#' 카테고리의 다른 글

[C#] BigInteger  (0) 2017.02.03
[C#] ListView 가로 스크롤 세로 스크롤로 바꾸기  (0) 2017.02.03
[C#]DLL 사용하기  (0) 2016.10.11
[C#] 폼 넘기기  (0) 2014.08.28
[C#]C# 과 오라클 데이터베이스 연동 방법  (1) 2014.08.28

버튼을 클릭했을시 폼간에 넘어가는 부분

Form1 에서 Form2 로 넘어가는 상황입니다.


버튼 함수 안에 집어넣을 소스


this.Visible=false; // 현재 폼 보이지 않게 하기

Form2 form2 = new Form2(); // 새폼 생성

form2.Owner = this; // 오너 넘기기

form2 .Show(); //폼 보여주는 부분



실행시켜보면 다른폼으로 넘어가는 부분을 볼 수 있습니다.

그러나 이게 다른폼으로 넘어가면 프로세스가 제대로 종료되지 않습니다.

Visible 에서 보이지만 않게 하고 종료를 시킨것이 아니기 때문인데요,

오른쪽 위의 빨간 엑스버튼을 누르면 종료가 되게 하면 문제가 해결이 됩니다.





왼쪽이 속성창인데요, 속성창에 번개모양을 클릭하면 이벤트 툴이 나오는걸 볼수 있습니다.

그곳에서 FormClosing 이라는 부분을 더블클릭하면 해당 소스코딩부분으로 넘어갑니다.




이렇게 위와 같은 소스코딩을 하면 프로세스가 모두 정상적으로 종료가 됩니다.



여기서 FormClosing 과 FormClosed의 차이점은

FormClosing 은 폼을 닫기 전에 수행할 것을 명령하는 것이고

FormClosed는 폼을 닫고 나서 수행할 것을 명령하는 것입니다.


예를들면 전자는 종료전 저장하는것을 묻는다라던가 위와 같이 모든 폼을 종료시킨다던가 하는 것이고

후자는 프로그램을 종료하고 나서 이용해주셔서 감사하다는 것이라던가 종료되었다고 알림을 한다던가 종료하고 나서 무언가를 할 때 사용한다고 생각하면 되겠습니다.


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


추가글 ) 위의 글처럼 하니까..안되길래 또 찾아보았다.

위와 같이 하면 이벤트를 써서 닫기를 안해도 된다. 


  • private void button1_Click(object sender, EventArgs e)  
  • {  
  •     this.Hide();  
  •     ChatRoom room = new ChatRoom();  
  •     room.ShowDialog();  
  •     this.Close();  
  • }  


  • 출처: http://thinkerodeng.tistory.com/142 [Thinker]


    아마 ShowDialog에서 폼을 잡고있다가, 종료가 될 때, Login폼으로 돌아와서 this.Close()를 하는 것 같다

    visible = false 나 Hide를 안해주면 Login창이 그대로 떠있는 것으로 봤을때, 아직 저 버튼 클릭이 다 처리되지 않고, 중간에 room폼이 잡고있어서 그런 것 같다!

    잡고있어야하기때문에, Show로 보여주면 안되고, ShowDialog로 불러와야 폼이 잡혀있다. 안그러면 this.Close()의 영향으로 인해 그냥 꺼지더라..


    그래서 내가 이번에 로그인폼을 만들면서 사용한 로그인 버튼 클릭은


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private void Btn_Login_Click(object sender, EventArgs e)
            {
     
                if (TB_ID.Text == id && TB_PW.Text == pw)
                {
                    this.Visible = false;
     
                    Form1 frm1 = new Form1();
                    frm1.Owner = this;
                    frm1.ShowDialog();
                    this.DialogResult = DialogResult.OK;
     
                    this.Close();
                    
                }
                else
                {
                    MessageBox.Show("아이디와 비밀번호를 확인해 주십시오.","로그인 실패");
                }
            }
    cs


    이렇게 응용하였다.

    '프로그래밍 > C#' 카테고리의 다른 글

    [C#] BigInteger  (0) 2017.02.03
    [C#] ListView 가로 스크롤 세로 스크롤로 바꾸기  (0) 2017.02.03
    [C#]DLL 사용하기  (0) 2016.10.11
    [C#]DLL 만들기  (0) 2016.10.11
    [C#]C# 과 오라클 데이터베이스 연동 방법  (1) 2014.08.28

    using System.Data.OracleClient; // 참조에서 오라클 클라이언트를 추가해 주어야 해요



    참조에 오른쪽 클릭에 참조 추가를 누르면 다음과 같은 이미지가 뜨는데요




    여기서 프레임워크에 있는 시스템 데이터 오라클 클라이언트를 찾아서 참조해 주고 

    위의 using 을 사용하면 됩니다


    그다음 약간의 다음과 같은 소스코드를 응용하여 쓰면 됩니다.


    public partial class Form1 : Form

    {

    //소스 이름과 유저 이름, 패스워드를 입력함 (나중에 오라클 연결할 때 sql문 사용)

    //Data Source  = 본인의 아이피 주소:포트번호/orcl 이다!

    string sql = "Data Source=220.1x9.3x.x5:15xx/orcl;

    User ID=아이디;Password=비밀번호";

    public Form1()

    {

    InitializeComponent();

    }

     

    private void Form1_Load(object sender, EventArgs e)

    {

    //using System.Data.OracleClient;를 사용하면 쓸 수 있는 함수들

    OracleConnection OraConn = new OracleConnection(sql);

    //sql에 저장된 데이터베이스 정보로 연결

    OraConn.Open();//디비 오픈

    OracleDataAdapter oda = new OracleDataAdapter();//어댑터 생성자

    oda.SelectCommand = new OracleCommand("Select D_DATE,TEMP, SPEED from winddata order by D_DATE DESC",OraConn);

    //order by D_DATE DESC D_DATA를 내림차순으로 정렬한다는 뜻!

    //SelectCommand 함수에 쿼리문 넣기

    //Select 테이블 안의 네임1, 테이블 안의 네임2 ... from 테이블이름

    DataTable d1 = new DataTable(); //데이터 저장공간 만들기

    oda.Fill(d1);//데이터 저장공간에 데이터 집어넣음

     

    //원하는 코드 응용하여 데이터 베이스를 이용한 무언가의 소스를 집어넣기

     

    OraConn.Close();//데이터 닫음

    dataGridView1.DataSource = d1;

    //그리드뷰를 이용하여 데이터가 잘 열렸는지 확인

     

    }

    }

    }

    그리드 뷰는 데이터가 잘 열렸는지 확인하기 위해서 자주 사용하는 윈폼 도구상자 입니다.

    윈폼을 사용하지 않을경우 없애버려도 무방합니다.



    제 프로젝트 하면서 배운 오라클 연결 방법인데요

    다른곳 찾아보는것보다 이게 훨씬 더 간단해서 공유하려고 합니다

    제가 씨샵에 대한 지식이 거의 없고 데이터베이스에 대한 지식도 아예 없는 상태에서

    배웠기 때문에 소스 분석이 자세하게 나와있어 이해에 많은 도움이 될꺼라고 생각해요!

    '프로그래밍 > C#' 카테고리의 다른 글

    [C#] BigInteger  (0) 2017.02.03
    [C#] ListView 가로 스크롤 세로 스크롤로 바꾸기  (0) 2017.02.03
    [C#]DLL 사용하기  (0) 2016.10.11
    [C#]DLL 만들기  (0) 2016.10.11
    [C#] 폼 넘기기  (0) 2014.08.28

    + Recent posts