라벨이 C-Sharp인 게시물 표시

C# 요청한 주소는 해당 컨텍스트에서 유효하지 않습니다 해결 방법 (The requested address is not valid in the context)

이미지
C# 요청한 주소는 해당 컨텍스트에서 유효하지 않습니다 해결 방법 (The requested address is not valid in the context) C#에서 요청한 주소는 해당 컨텍스트에서 유효하지 않습니다. 오류가 발생할 때 해결 방법에 대해 알아보도록 합시다. 우선 컨텍스트의 사전적인 정의는 문맥, 또는 맥락입니다. 이것에 비추어 프로그래밍에서의 컨텍스트 또한 프로그램 흐름상에 있는 문맥이라는 의미로 받아들이시면 이해하기가 편하실 겁니다. C# 넷 소켓에서 말하는 컨텍스트는 정보의 요청과 응답에 관한 흐름, 환경설정정보 등으로 생각할 수 있습니다. 그리하여 다음과 같은 문제로 해당 오류는 발생합니다. 최초 설계 시 내외부 주소 혼동으로 인한 예외 연결 끊김으로 인한 소켓 센드 오류(연결 재설정 필요) 아이피 변경 처리로 인해 통신 불가 해당과 같은 예외가 발생할 때 점검해볼 수 있습니다. ************** 예외 텍스트 ************** System.Net.Sockets.SocketException: 요청한 주소는 해당 컨텍스트에서 유효하지 않습니다 위치: System.Net.Sockets.Socket.SendTo(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, EndPoint remoteEP) 위치: System.Net.Sockets.UdpClient.Send(Byte[] dgram, Int32 bytes, IPEndPoint endPoint) 위치: (Object sender, FormClosingEventArgs e) 파일 .cs:줄 위치: System.Windows.Forms.Form.OnFormClosing(FormClosingEventArgs e) 위치: System.Windows.Forms.Form.WmClose(Message& m) 위치: System.Windows.Forms.Form.Wn

[WPF] WindowStartupLocation 가운데 설정 방법

이미지
WPF에서 애플리케이션을 개발할 때, 창을 화면 가운데로 설정하는 방법에 대해 알아보도록 합시다. 일반적으로 WindowStartupLocation 속성을 System.Windows.WindowStartupLocation.CenterScreen; 으로 설정하는 것을 고려해볼 수 있는데요, 이러한 경우에는 부모 폼의 위치와 관계 없이 무조건 화면의 가운데에 오는 부분이 고려하셔야 합니다. 부모 폼의 위치가 유동적일 때, 가운데 설정 방법에 대해 안내해드리겠습니다. Owner 설정 먼저, 화면 가운데로 위치할 창의 Owner를 설정해야 합니다. Owner를 설정하면 해당 창이 가운데로 정렬될 기준이 되기 때문입니다. 보통 Application.Current.MainWindow을 Owner로 설정하는 것이 일반적입니다. g_beom_MsgOk.Owner = Application.Current.MainWindow; 위 코드에서 g_beom_MsgOk는 화면 가운데로 위치시키고자 하는 창의 이름입니다. Owner를 설정하는 이 부분은 창을 화면 가운데로 정렬하기 위한 첫 단계라 할 수 있습니다. WindowStartupLocation 설정 이제 WindowStartupLocation 속성을 사용하여 창을 가운데로 위치해 보도록 하겠습니다. WindowStartupLocation 속성을 WindowStartupLocation.CenterOwner로 설정하면 창이 Owner를 기준으로 화면 가운데에 표시가 된답니다. g_beom_MsgOk.WindowStartupLocation = WindowStartupLocation.CenterOwner; 위 코드에서 g_beom_MsgOk는 화면 가운데로 위치하고자 하는 창의 이름이며, WindowStartupLocation.CenterOwner로 설정되면 이 창이 Owner를 기준으로 화면 가운데에 자동으로 위치하게 됩니다. WindowStartupLocation 가운데 설정 이제, 이 두 가지 단계를 따르면 WPF 애플리케이션에서

[C#] 개체를 DBNull에서 다른 형식으로 캐스팅할 수 없습니다. 해결하기

이미지
C#에서 개체를 DBNull에서 다른 형식으로 캐스팅할 수 없습니다. 오류가 발생하였을 때 해결방법을 찾고 계신가요? 해당과 같은 현상이 발생하는 이유는 DataTable의 Compute같은 메서드의 반환 형식이 오브젝트이기 때문입니다. 계산 결과식이 null로 평가되는 경우 반환 값은 null이 아니라 DBNull.Value가 됩니다. void BeomSang() { DataTable dataTable = new DataTable(); dataTable.Columns.Add("ColumnName", typeof(decimal)); dataTable.Rows.Add(DBNull.Value); DataColumn dataCol = dataTable.Columns["ColumnName"]; object o = dataTable.Compute("SUM(" + dataCol.ColumnName + ")", string.Empty); //'System.InvalidCastException' 형식의 예외가 mscorlib.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다. //추가 정보: 개체를 DBNull에서 다른 형식으로 캐스팅할 수 없습니다. decimal d = Convert.ToDecimal(o); } 그리하여 개체를 DBNull에서 다른 형식으로 캐스팅할 수 없습니다. 를 해결하려면 반환값에 대한 DBNull.Value 여부를 체크하거나, Compute 등의 메서드에 대해 확장 메서드 등 예외처리를 추가하는 부분을 점검하셔야 합니다.  다음은 삼항연산자를 통해 DBNull.Value인 경우, 0으로 설정하고 나머지는 해당 값을 컨버트 하도록 진행한 예제

[C#] Dictionary foreach for loop 예제

이미지
C#에서 Dictionary 컬렉션에 대해 foreach, for 반복문을 사용하는 방법에 대해 알아보도록 합시다. Dictionary foreach void BeomSang() { Dictionary<string, string> dictionary = new Dictionary<string, string>(); dictionary.Add("b", "beom"); dictionary.Add("s", "sang"); Debug.WriteLine("foreach keyValuePair"); foreach (KeyValuePair<string, string> keyValuePair in dictionary) { Debug.WriteLine($"key={keyValuePair.Key},value={keyValuePair.Value}"); } Debug.WriteLine("foreach var"); foreach (var keyValuePair in dictionary) { Debug.WriteLine($"key={keyValuePair.Key},value={keyValuePair.Value}"); } Debug.WriteLine("for loop"); for (int index = 0; index < dictionary.Count; index++) { Debug.WriteLine($"key={dictionary.ElementAt(index).Key},value={dictionary.ElementAt(index).Value}"); } Debug.WriteLine("dictionary.

[C#] 변수명 약어 추천, 코딩 컨벤션

이미지
C#에서 자주 사용하는 변수명 약어를 추천해 드리겠습니다. 다만, 어디까지나 예시이기 때문에 참고용도로 사용하셔야 합니다. 변수명 약어의 기초는 현재 개발 환경에서의 코딩 컨벤션을 중점으로 하여야 합니다. 예를 들면 "우리 프로그램에서 버튼은 무조건 btn으로 시작합니다. 시작버튼은 btnStart, 종료버튼은 btnEnd와 같이 약어를 설정하세요."와 같은 것입니다. 변수명 약어 A addr: Address adv: advanced app: Application arr: Array arg: Argument asc: Ascending asm: Assembly attr: Attribute aud: Audit auth: Authorization av: Availability avg: Average 변수명 약어 B bg: Background bl: Boolean, 변수명은 is나 has로 시작하는 편입니다. boolean보다는 bool로 사용함. btn: Button 변수명 약어 C calc: Calculator cbl: Check box list cert: Certification cfg: Configuration, config라고도 합니다. ch: Char, c로 사용하기도 합니다. chk: Check box cmb: Combo box cmd: Command cnt: Count ctrl: Control, ctr이나 ctl로 사용하기도 합니다. com, comp: Computer

[C#] Post Message (Send Message, Receive Message) 예제 자료

이미지
C#에서 메시지를 보내고 받는 방법에 대한 예제 자료입니다. 다음과 같은 목차로 진행하도록 하겠습니다. 😘 Windows Message Post Message (Send) Receive Message(WndProc callback function) Windows Message Windows Message는 user32.dll을 이용하여 윈도우 오브젝트 간 통신을 할 수 있도록 지원하는 기능입니다. 이번 예제는 PostMessage 함수를 이용하여 메시지를 주고받아보겠습니다. Post Message (Send) Send Message 함수도 있는데, 이번 예제는 PostMessage로 하겠습니다. HWnd : 윈도우 창의 메모리 주소입니다(리소스의 메모리 어드레스) 예제는 ReceiveBeomSang 윈도우를 찾습니다. WParam : Word 매개변수입니다. 예시는 0을 전달합니다. LParam : Long 매개변수입니다. 예시는 12345678을 전달합니다. public partial class SendBeomSang : Form { const int WM_USER = 1024; [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr FindWindow(string className, string windowName); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern IntPtr PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); public SendBeomSang() { InitializeComponent(); Post(); } private void Post() {

WPF PerformClick. Click Event. Button.PerformClick. (버튼 클릭 이벤트 발생 방법)

이미지
WPF에서 PerformClick을 시도해보신 적이 있나요? WPF는 퍼폼클릭이 존재하지 않기에 오류가 발생합니다. 대신 라우트된 이벤트 처리 및 레이즈이벤트를 이용하여 버튼 클릭 이벤트를 발생하게 할 수 있습니다. Windows Forms에서는 Button.PerformClick 로 하면 되는데 WPF에서는 해당 기능을 제공하지 않습니다. 이때, WPF Click Event는 어떻게 해야 하는지, 방법에 대해 알아보도록 합시다. WPF Button Click WPF 버튼 클릭 이벤트는 UIElement.RaiseEvent (ButtonBase.ClickEvent)를 사용할 수 있습니다. 다음과 같은 예제를 살펴볼 수 있습니다. btn.RaiseEvent(new RoutedEventArgs(System.Windows.Controls.Primitives.ButtonBase.ClickEvent, btn)); btn.RaiseEvent(new RoutedEventArgs(System.Windows.Controls.Primitives.ButtonBase.ClickEvent)); Windows Forms Button Click 윈도우폼에서 버튼클릭 이벤트는 다음과 같이 퍼폼클릭 메서드를 사용할 수 있답니다. btn.PerformClick();

[C#] DataRow order by, sort 하는 방법

이미지
Select 정렬 방법, 메서드에 정렬을 설정할 수 있는 매개변수가 있습니다. Select(string filterExpression) 메서드를 Select(string filterExpression, string sort) 메서드로 변경하여 처리하십시오. // // 요약: // 모든 System.Data.DataRow 개체의 배열을 가져옵니다. // // 반환 값: // System.Data.DataRow 개체의 배열입니다. public DataRow[] Select(); // // 요약: // 필터 조건에 맞는 모든 System.Data.DataRow 개체의 배열을 가져옵니다. // // 매개 변수: // filterExpression: // 행을 필터링하기 위해 사용하는 조건입니다. 예를 들어, 행을 필터링하는 방법은 DataView RowFilter 구문 [C#]을 참조하세요. // // 반환 값: // System.Data.DataRow 개체의 배열입니다. public DataRow[] Select(string filterExpression); // // 요약: // 필터 조건에 맞는 모든 System.Data.DataRow 개체의 배열을 지정된 정렬 순서대로 가져옵니다. // // 매개 변수: // filterExpression: // 행을 필터링하기 위해 사용하는 조건입니다. 예를 들어, 행을 필터링하는 방법은 DataView RowFilter 구문 [C#]을 참조하세요. // // sort: // 열과 정렬 방향을 지정하는 문자열입니다. // // 반환 값: // 필터 식에 맞는 System.Data.DataRow 개체의 배열을 반환합니다. public DataRow[] Select(string filterExpression, string sort); // // 요약: // 필터와 일치하는 모든 System.Data.DataRow 개체의 배열을 지정된 상태와 일치

SharpSvn.SvnRepositoryIOException: Unable to connect to a repository at URL '' ---> SharpSvn.SvnSystemException 해결 방법

이미지
SharpSvn.SvnRepositoryIOException: Unable to connect to a repository at URL '' ---> SharpSvn.SvnSystemException 해결하기 위하여 다음과 같이 진행해보도록 하겠습니다. 포트포워딩 확인하기 방화벽 인바운드/아웃바운드 규칙 확인하기 내부/외부 아이피, 포트 확인하기 Unable to connect to a repository at URL 리포지토리에 연결이 불가능한 현상을 발견하였습니다. 며칠 전만 해도 문제 없이 송수신이 되었던 것을 확인하였는데 갑자기 왜 이렇게 되었는지 확인해 보도록 하겠습니다. 포트포워딩 확인 포트포워딩  부분에 문제가 있는지 확인을 해주십시오. 방화벽 인바운드 규칙, 아웃바운드 규칙 확인 제어판 =>시스템 및 보안 => Windows Defender 방화벽으로 이동하여 고급 설정 버튼을 눌러주십시오. 그 다음, 방화벽의 인바운드 규칙과 아웃바운드 규칙에서 리포지토리에 대한 URL 관련 사항을 차단하고 있지 않은지 확인합니다. 방화벽을 확인하면서 동시에 백신 프로그램도 점검해 보았습니다. 하지만, 저의 경우 해당 부분에 이상은 없었답니다. 내부/외부 아이피, 포트 확인하기 모두 정상적으로 작동하는 것을 확인했는데도 계속 연결불가 현상이 발생하는 현상을 발견했습니다. '뭐지???' 계속 찾다가 30분만에 답을 찾았습니다... 아이피가 내부로 되어 있는데 외부에서 접속하려고 해서 문제가 됐던 것이었습니다. 내부로 설정되어 있던 아이피를 외부로 변경처리하였습니다. 변경 이전 : https://beomsang:99999/svn/Repo/Beom 변경 이후 : https://255.255.255.255:99999/svn/Repo/Beom SharpSvn.SvnRepositoryIOException: Unable to connect to a repository at URL 'https://beo

'Settings'에는 'Default'에 대한 정의가 포함되어 있지 않습니다. CS0117 해결 방법 (.net framework)

이미지
'Settings'에는 'Default'에 대한 정의가 포함되어 있지 않습니다. 오류가 발생하였습니다. 오류코드는 CS0117입니다. 해당 오류를 해결하는 방법에 대해 알아보도록 합시다. Settings.settings Generated Class Namespace Properties 의 Settings 가 인식이 안 되는 오류입니다. 원인과 해결 방법에 대해 안내해드리겠습니다. 솔루션 경로 > Properties > Settings.settings. 파일로 이동합니다. Properties 경로의 Settings.settings 에서 클래스네임스페이스를 확인해 주세요. 그리고 솔루션 상의 Setting.cs 도 한 번 확인해 주세요. Setting1.cs 나 Setting2.cs 와 같은 네임스페이스가 상이한 동일 세팅이 있을 수 있습니다.

DLL ''에서 이름이 ''인 진입점을 찾을 수 없습니다. 해결 방법 (EntryPointNotFoundException)

이미지
C#에서 [DLL ''에서 이름이 ''인 진입점을 찾을 수 없습니다.] 오류에 대해 해결하는 방법에 대해 알아보도록 합시다. 발생하였던 문제를 모두 해결하며 정리했던 것이라 본문을 읽어보시면 웬만하면 해결 가능하실 것입니다. 😘 목차는 다음과 같습니다. 오타에 의한 실수 DLL 버전이 달라서 해당 진입점이 없는 경우 64비트, 32비트(x86) DLL이 별도로 구성되는데, 이름이 동일하게 제공된 경우 해당 DLL에서 필수로 참조하는 또 다른 DLL 이 누락되어 있을 때, 예외처리가 부족한 경우 제가 현재까지 마주했던 문제유형을 크게 4가지로 분류해보았습니다. 하나하나 점검해 보았을 때 모두 해결했던 것으로 기억하는데, 이것 이외에도 발견하는 경우가 있고, 이 글이 생각난다면 추가하겠습니다~ 오타에 의한 실수 개발자도 사람이다보니 실수로 오타를 입력하여 개발하는 경우가 있죠. 철자를 제대로 적으셨는지 다시 한 번 확인해 주세요. DLL 버전이 달라서 해당 진입점이 없는 경우 DLL 버전이 여러 개인 경우, 예상하지 않은 구/신 버전을 사용하여 진입점을 찾을 수 없는 문제가 발생하는 경우가 있습니다. DLL 우클릭 > 속성 > 자세히 > 파일 버전, 제품 버전, 크기가 원하는 것이 맞는지 확인해 주세요. 64비트, 32비트(x86) DLL이 별도로 구성되는데, 이름이 동일하게 제공된 경우 보통 DLL 이 64비트, 32비트 버전이 구분이 되면 64비트는 dllName.dll, 32비트는 dllName(x86).dll 또는 dllName(32).dll 이 개발되리라 예상합니다. 그런데 가끔 보면 64비트/32비트 DLL이 동일한 명칭으로 개발되는 경우가 있습니다. 이러한 경우, 32비트가 필요한데 문제기기에서 64비트가 설치되어 있는 것이 아닌지 확인해 주세요. 해당 DLL에서 필수로 참조하는 또 다른 DLL 이 누락되어 있을 때, 예외처리가 부족한 경우 예를 들어 a.DLL 내부에서 b.DLL 을 참

CS0229 ''과(와) '' 사이에 모호성이 있습니다. CS0119 ''은(는) 지정한 컨텍스트에서 유효하지 않은 형식입니다. 해결 방법 (Ambiguity, not valid in this context)

이미지
이번 시간에 알아볼 C# 오류는 'CS0229 과(와) 사이에 모호성이 있습니다.', 그리고 'CS0119 은(는) 지정한 컨텍스트에서 유효하지 않은 형식입니다.'입니다. 결론부터 말씀드리면, 디자이너 클래스를 확인하는 것으로 해결할 수 있습니다. 각각의 오류에 대해 어떠한 부분이 문제인지 안내해 드리도록 하겠습니다. CS0229: ''과(와) '' 사이에 모호성이 있습니다. (Ambiguity between '' and '') 모호성 및 컨텍스트에서 유효하지 않은 형식 오류는 컨트롤 변경사항이 정상적으로 반영이 안 되었을 때 나오는 경우가 많습니다. CS0119: ''은(는) 지정한 컨텍스트에서 유효하지 않은 형식입니다. ('' is a type, which is not valid in the given context) 해당 클래스의 Designer.cs 로 이동해 보시면 모호성이 있는 컨트롤을 확인하실 수 있습니다. 변수명을 다르게 정의하시거나 삭제처리를 하시면 됩니다.

[Selenium] session not created: This version of ChromeDriver only supports Chrome version 해결 방법

이미지
셀레늄에서 session not created: This version of ChromeDriver only supports Chrome version 오류가 발생하였을 때 해결방법에 대해 알아보도록 하겠습니다. 처리되지 않은 'System.InvalidOperationException' 형식의 예외가 WebDriver.dll에서 발생했습니다. 추가 정보: session not created: This version of ChromeDriver only supports Chrome version 104 Current browser version is 106.0.5249.119 with binary path C:\Program Files\Google\Chrome\Application\chrome.exe (SessionNotCreated) Selenium에서 발생할 수 있는 예외입니다. 현재 구글 경로 상에 설치된 크롬 애플리케이션의 버전과 소스에 설치된 크롬 드라이버 간의 버전이 호환이 불가하여 세션 생성에 문제가 생긴 경우입니다. session not created 해결하기 [도구] > [NuGet 패키지 관리자] > [패키지 관리자 콘솔] 을 실행합니다. (C# 기준) 호환이 가능한 원하는 버전으로 업데이트 합니다. 다음은 예시 명령어입니다. Install-Package Selenium.WebDriver.ChromeDriver -Version 106.0.5249.6100

System.InvalidOperationException: CreateHandle() 중에는 Dispose() 값을 호출할 수 없습니다. 해결 방법

이미지
CreateHandle() 중에는 Dispose() 값을 호출할 수 없습니다. 예외 현상을 체크박스 초기화와 관련하여 안내해드리겠습니다. C# Windows Forms는 InitializeComponent와 동시에 체크박스의 체크 상태에 따라 발생하는 이벤트가 활성화 될 수 있습니다. 이때 추가 예외가 발생하여 CreateHandle() 중에 폼에 대한 종료 명령이 실행되어, Dispose() 값을 호출하는 경우가 있습니다. CreateHandle() 중에는 Dispose() 값을 호출할 수 없습니다. private void chkBox_CheckedChanged(object sender, EventArgs e) { //Todo something } 이 대화 상자 대신 JIT(Just-in-time) 디버깅을 호출하는 방법에 대한 자세한 내용은 이 메시지의 뒷부분을 참조하십시오. ************** 예외 텍스트 ************** System.InvalidOperationException: CreateHandle() 중에는 Dispose() 값을 호출할 수 없습니다. 위치: System.Windows.Forms.Control.Dispose(Boolean disposing) 위치: System.Windows.Forms.ContainerControl.Dispose(Boolean disposing) 위치: System.Windows.Forms.Form.Dispose(Boolean disposing) 위치: --Override Dispose Grandparent Form 위치: --Override Dispose Parent Form 위치: --Override Dispose Child Form 위치: --Closed 위치: System.Windows.Forms.Form.OnClosed(EventArgs e) 위치: System.Windows.Forms.Form.

C# 전원 옵션 연결 끊김 방지하는 방법 (powercfg change)

이미지
C# 명령 프롬프트(cmd)를 이용하여 전원 옵션 연결이 끊기는 현상을 방지해 보는 코드 예시입니다. powercfg 명령 및 값을 변경하라는 change(또는 x) 명령어를 통해 코드를 만들어서, 사용자의 선택 한 번으로 전원 옵션 연결 끊김을 방지하도록 설정하도록 하는 기능입니다. /change 또는 /x 로 파워스킴을 변경처리합니다. 매개변수 옵션은 다음과 같으며, 옵션 이후 값 변수를 분 단위로 추가합니다. 0으로 하는 경우에는 해당 기능을 끄도록 합니다. monitor-timeout-ac monitor-timeout-dc disk-timeout-ac disk-timeout-dc standby-timeout-ac standby-timeout-dc hibernate-timeout-ac hibernate-timeout-dc 다음의 명령어를 호출할 수 있는 코드를 통해 디스크 끄기, 절전모드 등을 사용 안 할 수 있습니다. powercfg /change monitor-timeout-ac 0 powercfg /change monitor-timeout-dc 0 powercfg /change disk-timeout-ac 0 powercfg /change disk-timeout-dc 0 powercfg /change standby-timeout-ac 0 powercfg /change standby-timeout-dc 0 powercfg /change hibernate-timeout-ac 0 powercfg /change hibernate-timeout-dc 0

크리스탈 리포트 프린터 용지 공급 설정하기 방법

이미지
크리스탈 리포트에서 프린터 용지 공급을 설정하는 방법은 두 가지입니다. PaperSource와 CustomPaperSource가 바로 그것입니다. 보통 용지 공급 설정이 제대로 안 될 때, 페이퍼소스 부분만 계속 제어를 시도해보고, 그럼에도 설정이 안 되는 프린터가 있을 때에는 해결 방법에 대해 고민을 많이 했었습니다. 이때에는 프로그램을 이용하여 크리스탈 리포트 프린터 설정을 강제로 해보는 방법을 이용해 보곤 했습니다. 그런데 찾다 보니 커스텀페이퍼소스가 있었네요! 이 두 가지 클래스를 간단히 비교해 보겠습니다. PaperSource 네임스페이스는 CrystalDecisions.Shared입니다. 프린터 용지 공급 설정 기본값은 Auto(7)입니다. 자동 선택한 용지함에서 출력이 되다보니 2~3단 용지 공급이 있는 경우에 예상하지 않은 곳에서 출력이 되는 문제가 있을 수 있습니다. 그런 경우에 페이퍼소스를 설정해 주세요. // // 요약: // PrintOptions 클래스의 PaperSource 속성에 용지 공급을 지정합니다. [CLSCompliant(true)] public enum PaperSource { // // 요약: // 상단 용지함에서 인쇄합니다. Upper = 1, // // 요약: // 하단 용지함에서 인쇄합니다. Lower = 2, // // 요약: // 중간 용지함에서 인쇄합니다. Middle = 3, // // 요약: // 용지 수동 공급에서 인쇄합니다. Manual = 4, // // 요약: // 봉투함에서 인쇄합니다. Envelope = 5, // // 요약: // 봉투 수동 공급에서 인쇄합니다. EnvManual = 6, // // 요약: // 프린터가 자동 선택한 용지함에

형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하십시오 CS0246 해결 방법

이미지
C#에서 '형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하십시오'와 함께 발생하는 오류코드는 CS0246입니다. 이번 주제는 해당 오류를 해결하는 방법에 대해 알아보도록 합시다. 형식 또는 네임스페이스 이름을 찾을 수 없을 때에는 시작 프로젝트의 참조에서 노란색 경고 표시가 있는 참조를 확인하거나 오류 목록에 있는 네임스페이스를 확인합니다. 1. 외부 참조가 누락되어 있는 경우에는 [프로젝트] 또는 참조 부분에서 우클릭 이후 [참조]를 눌러 참조 관리자를 실행해 주세요. 어셈블리, 프로젝트, COM 중 누락된 참조를 추가하여 빌드를 진행합니다. 2. 솔루션 또는 프로젝트 리빌드에 의해 출력 경로 상의 참조가 정리되어 버리는 경우가 있습니다. 이것 또한 위와 마찬가지로 누락된 참조를 제 자리에 위치하도록 진행해 주세요. 이것으로 CS0246 오류를 해결할 수 있습니다.

잘못된 작업입니다. 연결이 닫혔습니다. 해결 방법

이미지
잘못된 작업입니다. 연결이 닫혔습니다. 오류가 발생하였나요? 해당 오류는 IDbConnection 객체의 ConnectionState가 Closed 되어 발생합니다. 오류 발생 예시 데이터베이스 커넥션 설정 시 Open을 누락한 경우 데이터베이스 커넥션 타임아웃으로 연결이 닫힌 경우 System.InvalidOperationException: 잘못된 작업입니다. 연결이 닫혔습니다. 위치: System.Data.ProviderBase.DbConnectionClosed.BeginTransaction(IsolationLevel il) 위치: System.Data.OracleClient.OracleConnection.BeginDbTransaction(IsolationLevel isolationLevel) 위치: System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction() 커넥션 객체가 생성이 된다고 하여 스테이트가 자동으로 열리지는 않습니다. 명시적으로 메서드를 호출하셔야 합니다. 다음은 잘못된 작업입니다. 연결이 닫혔습니다. 오류 예제 자료입니다. using (IDbConnection con = new OracleConnection("User Id=userName;Password=password;Data Source=dataSourceName")) { //System.InvalidOperationException: 잘못된 작업입니다. 연결이 닫혔습니다. //con.Open(); using (IDbCommand cmd = con.CreateCommand()) { using (IDbTransaction tx = con.BeginTransaction()) { cmd.Transaction = (OracleTransaction)tx; cmd.CommandText

C# 문자열 반복하는 방법 정리. String, for, Enumerable.Repeat, string.Concat, string.Join, StringBuilder.Insert

이미지
C#에서 문자열을 반복하는 방법에 대한 안내입니다. 크게 3가지를 다루며, 각각 캐릭터 카운트, 스트링 반복문, Enumerable 클래스의 리핏을 사용하겠습니다. String(char c, int count) 스트링에서 새 인스턴스를 초기화하며 특정 문자 'c'를 지정한 횟수 'count'만큼 반복하여 문자를 나타낼 수 있습니다. 'c' 매개변수는 유니코드 문자이며 'count' 매개변수는 문자 'c'가 발생하는 횟수입니다. string scc = new string('B', 3); => "BBB" for (int i = 0; i < 3; i++) for 또는 while과 같은 반복문으로 스트링을 초기화 합니다. 해당 예제는 스트링빌더를 사용하였습니다. i번 반복하여 문자열을 할당합니다. StringBuilder sb = new StringBuilder(); for (int i = 0; i < 3; i++) { sb.Append("Beom"); } string sf = sb.ToString(); => "BeomBeomBeom" Enumerable.Repeat System.Linq.Enumerable 클래스의 반복 메서드를 사용하는 방법입니다. 사용하려는 리핏 메서드의 명세는 다음과 같습니다. public static IEnumerable<TResult> Repeat<TResult>(TResult element, int count); // 요약: 반복 되는 값을 포함 하는 시퀀스를 생성 합니다. // 매개 변수: element: 반복할 값입니다. // count: 생성된 시퀀스에서 값을 반복할 횟수입니다. // 형식 매개 변수: TResult: 결과 시퀀스에서 반복할 값의 형식입니다. // 반환 값: System.Collections

[C#] 윈도우 폼 최대화, 최소화 방법

이미지
C#에서 윈도우 폼은 기본적으로 우측 상단에 최대화, 최소화 및 닫기 버튼이 있습니다. 이 기능을 사용하지 않고 싶으실 때에는 다음과 같이 진행하시면 됩니다. 각각 폼의 캡션 표시줄과 관련한 프로퍼티 설정입니다. 즉, 윈도우 폼 최대화와 최소화를 어떻게 하는지 그 방법에 대해 안내해드리겠습니다. //폼의 캡션 표시줄에 최대화 단추가 표시되는지 나타내는 값을 가져오거나 설정합니다. this.MaximizeBox = false; //폼의 캡션 표시줄에 최소화 단추가 표시되는지를 나타내는 값을 가져오거나 설정합니다. this.MinimizeBox = false; //폼의 캡션 표시줄에 컨트롤 상자가 표시되는지를 나타내는 값을 가져오거나 설정합니다. this.ControlBox = false; MaximizeBox 프로퍼티를 false로 설정하면 최대화 단추를 비활성화 합니다. MinimizeBox 프로퍼티를 false로 설정하면 최소화 단추를 비활성화 합니다. ControlBox 프로퍼티를 false로 설정하면 캡션 표시줄에 있는 모든 컨트롤박스를 보이지 않도록 합니다 . 컨트롤박스에는 최대화 단추, 최소화 단추, 닫기 단추가 있습니다.