반응형

안녕하세요

 

포스팅으로 열공하고 있는 코딩연습생입니다

 

저번 포스팅에서 비쥬얼스튜디오 2017을 이용하여 간단한 로그인 앱 만드는 방법을 포스팅했는데요

 

그 포스팅에 이어 로그인 할때 계정이 없을 경우 회원가입을 해야 하지요?

 

그래서 MSSQL와 연동하여 회원가입이 가능하도록 한번 만들어 봤습니다

 

물론 회원가입시에 ID 중복체크, 패스워트 생성 규칙, 주소 검색, 등 많은 기능이 필요한데

 

이번 시간에는 기초적인 부분만 만들어 보았습니다

 

첫번째 ID생성(문자열)

 

두번째 패스워드(문자열)

 

세번째 이메일(문자열)

 

이렇게 3가지만 등록한뒤 생성 버튼을 클릭하면 DB에 Data가 생성되어 로그인이 되도록 하는 구조 입니다

 

이렇게 기초 적인 부분을 만든뒤 차츰차츰 기능을 하나씩 구현하는게 바로 코딩에 재미겠죠ㅎ

 

그럼 진행해 보도록 하겠습니다

 

일단 저번 시간 포스팅까지 완성이 되어야 이어서 가능하니 아래 링크를 통해서 로그인 샘플 먼저 완성해주세요

 

https://codingman.tistory.com/96

 

[Xamarin Forms] 자마린으로 간단한 로그인 앱 만들기

안녕하세요. 코딩연습생입니다 비쥬얼스튜디오 Xamarin을 이용한 로그인 창 만들기 입니다 저도 처음 접해보는 부분이라 많이 헷갈리고 연습을 하고 있습니다~ 음..일단 시작에 앞서 비쥬얼스튜디오의 Cross-Platf..

codingman.tistory.com

 

그러면 해당 프로젝트 파일 중에 해당 위치로 찾아 갑니다

 

로그인 화면에서 이미 만들어져 있는 부분인데 그 부분에서 INSERT 부분만 추가가 된것입니다

 

*SignUpPage.xaml.cs

using System;
using System.Linq;
using Xamarin.Forms;
using System.Data;
using System.Data.SqlClient;

namespace LoginNavigation
{
	public partial class SignUpPage : ContentPage
	{
		public SignUpPage ()
		{
			InitializeComponent ();
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			var user = new User () {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text,
				Email = emailEntry.Text
			};

            
            CreateSign();

			// Sign up logic goes here
			var signUpSucceeded = AreDetailsValid (user);
			if (signUpSucceeded) {
				var rootPage = Navigation.NavigationStack.FirstOrDefault ();
				if (rootPage != null) {
					App.IsUserLoggedIn = true;
					Navigation.InsertPageBefore (new MainPage (), Navigation.NavigationStack.First ());
					await Navigation.PopToRootAsync ();
				}
			} else {
				messageLabel.Text = "Sign up failed";
			}
		}

        public void CreateSign()
        {
            SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
            sqlConnectionStringBuilder.DataSource = "서버IP";
            sqlConnectionStringBuilder.InitialCatalog = "DB명";
            sqlConnectionStringBuilder.UserID = "계정";
            sqlConnectionStringBuilder.Password = "계정암호";
            sqlConnectionStringBuilder.IntegratedSecurity = false;
            SqlConnection conn = new SqlConnection(sqlConnectionStringBuilder.ConnectionString);
            conn.Open();

            try
            {
                string Query = "MERGE USER_MAST";
                Query += "            USING(SELECT 'X' AS DUAL) AS B ";
                Query += "               ON [USER_ID] = '" + usernameEntry.Text + "'";
                Query += "            WHEN MATCHED THEN";
                Query += "                 UPDATE SET USER_PSWD = '" + passwordEntry.Text + "'";
                Query += "            WHEN NOT MATCHED THEN";
                Query += "                 INSERT([USER_ID], USER_PSWD) VALUES ('" + usernameEntry.Text + "','" + passwordEntry.Text + "');";
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;

                cmd.CommandText = Query;
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception Ex)
            {
                conn.Close();
            }
            finally
            {
                conn.Close();
            }
        }

        bool AreDetailsValid (User user)
		{
			return (!string.IsNullOrWhiteSpace (user.Username) && !string.IsNullOrWhiteSpace (user.Password) && !string.IsNullOrWhiteSpace (user.Email) && user.Email.Contains ("@"));
		}
	}
}

 

*SignUpPageCS.cs

using System;
using System.Linq;
using Xamarin.Forms;
using System.Data;
using System.Data.SqlClient;

namespace LoginNavigation
{
	public class SignUpPageCS : ContentPage
	{
		Entry usernameEntry, passwordEntry, emailEntry;
		Label messageLabel;

		public SignUpPageCS ()
		{
			messageLabel = new Label ();
			usernameEntry = new Entry {
				Placeholder = "username"	
			};
			passwordEntry = new Entry {
				IsPassword = true
			};
			emailEntry = new Entry ();
			var signUpButton = new Button {
				Text = "Sign Up"
			};
			signUpButton.Clicked += OnSignUpButtonClicked;

			Title = "Sign Up";
			Content = new StackLayout { 
				VerticalOptions = LayoutOptions.StartAndExpand,
				Children = {
					new Label { Text = "Username" },
					usernameEntry,
					new Label { Text = "Password" },
					passwordEntry,
					new Label { Text = "Email address" },
					emailEntry,
					signUpButton,
					messageLabel
				}
			};
		}

		async void OnSignUpButtonClicked (object sender, EventArgs e)
		{
			var user = new User () {
				Username = usernameEntry.Text,
				Password = passwordEntry.Text,
				Email = emailEntry.Text
			};

            CreateSign();

            // Sign up logic goes here

            var signUpSucceeded = AreDetailsValid (user);
			if (signUpSucceeded) {
				var rootPage = Navigation.NavigationStack.FirstOrDefault ();
				if (rootPage != null) {
					App.IsUserLoggedIn = true;
					Navigation.InsertPageBefore (new MainPageCS (), Navigation.NavigationStack.First ());
					await Navigation.PopToRootAsync ();
				}
			} else {
				messageLabel.Text = "Sign up failed";
			}
		}

        public void CreateSign()
        {
            SqlConnectionStringBuilder sqlConnectionStringBuilder = new SqlConnectionStringBuilder();
            sqlConnectionStringBuilder.DataSource = "서버IP";
            sqlConnectionStringBuilder.InitialCatalog = "DB명";
            sqlConnectionStringBuilder.UserID = "계정";
            sqlConnectionStringBuilder.Password = "계정암호";
            sqlConnectionStringBuilder.IntegratedSecurity = false;
            SqlConnection conn = new SqlConnection(sqlConnectionStringBuilder.ConnectionString);
            conn.Open();

            try
            {
                string Query = "MERGE USER_MAST";
                Query += "            USING(SELECT 'X' AS DUAL) AS B ";
                Query += "               ON [USER_ID] = '" + usernameEntry.Text + "'";
                Query += "            WHEN MATCHED THEN";
                Query += "                 UPDATE SET USER_PSWD = '" + passwordEntry.Text + "'";
                Query += "            WHEN NOT MATCHED THEN";
                Query += "                 INSERT([USER_ID], USER_PSWD) VALUES ('" + usernameEntry.Text + "','" + passwordEntry.Text + "');";
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = conn;

                cmd.CommandText = Query;
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception Ex)
            {
                conn.Close();
            }
            finally
            {
                conn.Close();
            }
        }

        bool AreDetailsValid (User user)
		{
			return (!string.IsNullOrWhiteSpace (user.Username) && !string.IsNullOrWhiteSpace (user.Password) && !string.IsNullOrWhiteSpace (user.Email) && user.Email.Contains ("@"));
		}
	}
}

 

그런데 위의 INSERT 구문을 보시면 일반적인 INSERT문하고 조금 차이가 있죠??

 

제가 올린 포스팅 내용중에 보시면 INSERT와 UPDATE를 한번에 처리하는 구문입니다

 

자세한건 아래 링크를 통해서 확인해보시면 됩니다

 

https://codingman.tistory.com/98

 

[MSSQL] MERGE를 이용한 INSERT와 UPDATE 한번에 하기

안녕하세요~ 코딩 연습생입니다 코로나 사태 여러분 괜찮으신가요?? 언제쯤 잠잠해질지 참...얼른 백신이나 대책이 나왔으면 좋겠는데 마스크 때문에 숨도 잘 안쉬어지네요~ 그래도 할건 해야겠죠?ㅎㅎ 그래서 저..

codingman.tistory.com

 

이렇게 소스코딩을 완료 하셨다면 이제 빌드를 진행하여 실행을 해봐야겠죠?

 

로그인 메인 화면에서 우측 상단에 있는 SIGN UP이라는 글씨를 클릭하면 회원가입 화면으로 이동합니다

 

 

회원 가입 페이지로 이동하게 되면 아래와 같은 화면이 보이게 됩니다

 

회원가입 화면에서 Username(계정명), Password(패스워트), Email address(이메일) 정보를 입력합니다

*굳이 저랑 똑같이 입력하지 않으셔도 됩니다

 

저는 빨간색 글씨 처럼 입력 하였습니다

 

정보 입력이 모두 되셨다면 아래 SIGN UP 버튼을 누루시면 컨텐츠 메인 화면으로 이동하게 됩니다

 

 

컨텐츠 메인 화면으로 정상적으로 이동하셨다면 다음과 같이 우측 상단의 글씨 LOGOUT으로 변경이 됩니다

 

 

그러면 MSSQL DB에 정상적으로 데이터가 입력되었는지 확인해 볼까요?

 

SQL에서 USER_MAST 테이블을 조회해 보니 정상적으로 값이 INSERT 되었네요

 

만약에 이미 USER_MAST 테이블에 "테스트"라는 계정이 존재했다면 INSERT가 아니라 UPDATE가 진행되었을 겁니다

 

 

회원가입의 기본적인 기능이 담겨 있는 내용인데요

 

이부분에서 앞써 말씀드렸던 추가적인 기능들이 첨가가 된다면 좀더 있어보이는(?)ㅎ 그런 회원가입이 되지 않을까요?ㅎ

 

저도 시간을 투자해서 좀 더 발전시켜 봐야겠습니다

 

반응형
반응형

안녕하세요

 

코딩연습생입니다

 

요즘 코로나 때문에 난리도 아니죠?ㅠ 제 주변에도 온통 관심사가 코로나에 가있습니다

 

이런 시국에 회사에서는 왜이렇게 일을 많이 주는걸까요....참 이해하기 힘든...ㅋㅋ

 

이번 포스팅은 요즘 안드로이드 공부 중에 에뮬레이터를 사용하다보니 속도도 느리고 버그(?)도 많이 생기느듯해서

 

폭풍 검색을 해서 찾아낸 방법인데요

 

바로 USB를 꽃아서 직접 내 안드로이드 폰에서 직접 디버깅을 하는 방법입니다

 

에뮬레이터랑 비교해 봤을때 속도면에서 빠르고 배포 테스트도 한번에 되는거 같아서 정말 편한거 같습니다

 

해당 방법을 적용하기 위해서는 내가 사용할려는 핸드폰 기종에 따라 조금 다릅니다

 

저의 경우 삼성 폰을 사용중이기 때문에 삼성폰을 위주로 설명을 할테니 다른 기종을 사용하시는분들은

 

참고해서 비슷하게 적용하시면 될거 같습니다

 

1. 핸드폰 USB 드라이브 설치

   - 통합 USB 드라이브 설치하기 삼성 통합 툴입니다

 

http://local.sec.samsung.com/comLocal/support/down/kies_main.do?kind=usb

 

http://local.sec.samsung.com/comLocal/support/down/kies_main.do?kind=usb%20

 

local.sec.samsung.com

 

2. 핸드폰 설정 변경

   - 설정 메뉴로 들어가 줍니다

   - 테마 종류에 따라 아이콘을 다르겠지만 보통 메뉴에 설정이 있습니다

 

   - 설정 메뉴에 들어가면 맨 아래쪽에 휴대전화 정보라는것이 있습니다

 

    - 휴대전화 정보안에 보시면 소프트웨어 정보라는것이 또 있습니다 클릭해 주세요

 

 

    - 소프트웨어 정보 중 빌드번호 부분을 연속으로 클릭해 주시면 아래 작은 글씨로 문구가 뜨면서

      개발자 모드가 활성화 됩니다

 

   - 다시 설정 화면으로 들어가시면 맨 아래쪽에 아래와 같이 개발자 옵션이라는 메뉴가 생기셧을 겁니다

    클릭해서 들어가 주세요

 

 

    - 개발자 옵션에 들어가시면 쭉~ 밑으로 내리시면 USB디버깅 체크박스를 활성화 상태로 만들어 주시면

      핸드폰 설정이 완료됩니다

 

 

3. 비쥬얼스튜디오 실행

   - 위의 휴대폰 설정이 완료되셨다면 USB 연결을 한뒤에 비쥬얼스튜디오를 실행하시면

     해당 프로젝트의 실행 아이콘이 아래와 같이 핸드폰 기종 명칭으로 변경 될것입니다

     이 상태에서 클릭하시면 자동으로 USB에 연결된 휴대폰으로 배포되어지고 비쥬얼스튜디오와 연결된 상태에서

     앱이 실행되어 디버깅이 가능합니다

 

 

저사양 PC로 앱을 개발하고 계신분이시라면 바로 실행 해 보세요ㅎㅎ

 

반응형
반응형

안녕하세요 코딩 연습생입니다

 

블로그를 시작한지 3개월(?) 정도 되었는데 하루 한개의 포스팅이 이렇게 어려울수가 없습니다ㅠ

 

최대한 많이 올려볼려고 노력하는데 회사원으로써 기여도가 상당히 낮네요ㅎㅎ

 

주제선정 -> 내용 검색 -> 프로그램 구현 -> 화면 캡쳐 -> 내용 정리 -> 포스팅

 

이 순서로 블로그를 작성중인데 프로그램 구현에서 2~3일이 걸리네요ㅎㅎ

 

내가 지식과 능력이 부족한탓인듯 합니다ㅎ

 

자기 개발을 위해 쭉~~~ 운영 할 생각이니 이해해 주시길 바랍니다ㅎ

 

이번 포스팅은 저번 시간에 포스팅 했던 비쥬얼 스튜디오 2017에서 에뮬레이터를 설정하는 방법을 

 

포스팅 했었는데요

 

https://codingman.tistory.com/90

 

[Visual Studio 2017] Microsoft Visual Studio Emulator for Android 설치 하기

안녕하세요 코딩 연습생입니다 이번 포스팅은 비쥬얼스튜디오2017을 이용하여 안드로이드 개발 환경을 구축하기 1단계 입니다 비쥬얼 스튜디오 2017에 에뮬레이터를 설치하여 안드로이드 개발환경을 만들어 보도록..

codingman.tistory.com

 

이번 시간에는 설정한 에뮬레이터에서 인터넷을 바로 사용할 수 있게 설정하는 방법을 포스팅 해볼려고 합니다

 

기본 에뮬레이터를 설정한 후 실행해서 인터넷 연결을 하시면 다음과 같은 화면이 나오실 꺼에요

 

 

인터넷 프로토콜이 없다는 말입니다

 

그러면 어떻게 해야 하는냐...그걸 이제 설명할려고 해요ㅎㅎ

 

차근 차근 해보시기 바랍니다

 

저는 윈도우10을 사용중이라서 캡쳐 내용이 윈도우10 위주로 설명되어 있으니 참고 하시기 바랍니다

 

1. 제어판 열기

   - 윈도우10에서 검색을 통해 제어판을 열어 줍니다

 

2. 제어판의 항목중 관리도구를 선택해 주세요

 

3. 관리도구 항목 중 Hyper-V 관리자를 선택합니다

 

4. Hyper-V 관리자에서 좌측 작업 항목중에서 가상 스위치 관리자를 클릭합니다

 

5. 가상 스위치 관리자에서 스위치 유형을 외부로 선택한 후에 가상 스위치 만들기를 클릭 합니다

 

6. 다시 Hyper-V 관리자에서 가상 컴퓨터에서 사용중인 에뮬레이터를 선택한 후 마우스 오른쪽 버튼을 클릭하면

   세부 메뉴가 보입니다 그 리스트 중에서 설정을 클릭

 

7. 설정 화면에서 하드웨어 추가 항목중 네트워크 어댑터를 클릭 후 추가 버튼을 눌러 어댑터를 추가 합니다

 

8. 신규로 생성된 네트워크 어댑터를 클릭한 후에 가상 스위치를 5번에서 생성한 가상 스위츠를 선택한 뒤 적용 -> 확인

   버튼을 클릭합니다

 

여기까지 설정하신뒤 다시 에뮬레이터를 실행한 뒤 인터넷을 확인해시면 다음과 같이 정상 연결이 됩니다

 

 

간단한 부분인데 모르면 어렵죠ㅎㅎ

 

감사합니다~

반응형
반응형

안녕하세요

 

개인적 개발 노트북으로 사용중인 맥북에어에 부트캠프를 활용해서 외장USB에 윈도우10을 설치하여

 

사용중인데요

 

안드로이드 개발 환경 구축을 위해서 

 

비쥬얼 스튜디오 에뮬레이더를 설치하는 과정에서 Hyper-V를 활성화 할 수 없다(?) 이런 오류가

 

나타나면서 설치가 안되서 엄청 당황했는데요

 

해결 방법이 너무 어처구니 없이 간단해서 기록하고 공유하고자 포스팅 합니다

 

[오류 화면]

 

분명 맥북에서 Hyper-v를 지원하는데 이렇게 나오는 경우는 맥OS에서 Hyper-v 에뮬를 활성화 해주지

 

못해서 나타나는 현상이라고 합니다

 

[해결 방법]

 

1. 맥OS로 부팅을 합니다

   - 암호 입력화면까지만 부팅합니다 로그인 하지 마세요

 

2. 맥 로그인 화면에서 재부팅을 하여 Option키를 사용해서 부트캠프 윈도우로 부팅해주세요

 

3. Microsoft Visual Studio Emulator for Android의 설치파일로 설치해 줍니다

   - 설치 파일을 실행하면 다음과 같이 정상 설치 화면이 나타납니다

 

 

설치 버튼을 눌러서 다음을 진행하시면 됩니다

 

 

이렇게 정상적으로 설치가 되네요ㅎㅎ

 

별거 아니지만 당황스러운 오류를 해결하였습니다

반응형

+ Recent posts