C# SqlDataReader 클래스에서 Null 값을 받아올수있는 방법이 있을까요?

private void LoginBtn_Click(object sender, EventArgs e)
{
    /*데이터 베이스 접속 정보 */
    string DB_IDs = "sesun"; // DB 아이디 
    string DB_PWs = "a123123"; // DB 비밀번호 
    string DB_Name = "yimartFactory"; // DB 이름
    string DB_ServerAdress = "127.0.0.1"; // /DB 주소 

    /*데이터 베이스 연결 작업*/  
    string ConnectionString = "SERVER=" + DB_ServerAdress + ";DATABASE=" + DB_Name + ";UID=" + DB_IDs + ";PASSWORD=" + DB_PWs + ";";

    /*
     * SQL 서버를 사용하기 위해서는 클라이언트 프로그램은 SqlConnection을 사용하여 먼저 서버와 접속을 해야한다.
     * 서버와 접속을 위해서는 접속시 사용하는 Connection String이 필요한데, 
     * 이에는 서버명, 인증방법, 초기 DB명 등을 지정하면 된다.
     */
    SqlConnection Yimartcon = new SqlConnection(ConnectionString); // 접속하기 위한 클래스 생성 (매개변수는 connctionString)

    //Yimartcon.Open(); // 접속
try
{
    Yimartcon.Open(); // 접속
    IsCon.Text = "DB접속";
  
    //Yimartcon.Close();
    bool IsLogin = false; // 로그인 여부를 판단하는 데이터
    string UserID = InputId.Text; //윈폼상에서 입력 받는 아이디
    string UserPW = InputPw.Text; //윈폼상에서 입력 받는 패스워드 

    string sql = "SELECT * FROM _TCustUserTable WHERE CustID=\'" + UserID + "\' ";
    SqlCommand LoginCmd = new SqlCommand(sql, Yimartcon);
    SqlDataReader mdr = LoginCmd.ExecuteReader(); //쿼리 실행된 데이터를 저장하고 있음.

    if(UserID == "")
    {
        FailMsgLabel.Text = "아이디를 입력해주세요";
    }
    if(UserPW == "")
    {
        FailMsgLabel.Text = "패스워드를 입력해주세요";
    }
    if(UserID == "" && UserPW =="")
    {
        FailMsgLabel.Text = "아이디와 비밀번호를 입력해주세요";
    }
        while (mdr.Read())
        {
        if (UserID == (string)mdr["CustID"] && UserPW == (string)mdr["CustPW"])
        {
            IsLogin = true;
            FailMsgLabel.Text = "로그인에 성공하였습니다";
        }

        else if (UserPW != (string)mdr["CustPW"])
        {
            FailMsgLabel.Text = "패스워드가 틀립니다. 확인해주세요";
        }
        else if (????) // 이부분이 너무궁금합니다.
        {
            FailMsgLabel.Text = "존재하지 않는 아이디입니다."; 
        }
        else
        {
            FailMsgLabel.Text = "관리자에게 문의하세요";
        }
    }   
    mdr.Close(); 
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
    //콘솔일때 Console.Writeline(ex.message);
}

안녕하세요 스마트팩토리 개발자가 되고 싶은 초보자입니다.
우선 간단한 MES 프로그램 개발을 현재 독학으로 진행중인데…

“SELECT * FROM _TCustUserTable WHERE CustID='” + UserID + "' "; 다음과 같은 커리문 실행 시
아이디가 존재하지 않을때 → Null 일때 조건을 어떻게 주어야하는지 궁금합니다.

else if (????)
{
    FailMsgLabel.Text = "존재하지 않는 아이디입니다."; 
}
1개의 좋아요

UserID(텍스트박스)에서 입력 받은 값이 DB에 존재하지 않을때를 조건문에 넣고 싶습니다.

처음에는 간단하게 (UserID != (string)mdr[“CustID”]) 이렇게 하면 될 줄 알았는데…

SELECT 문 실행 시 값이 아예 존재하지 않기 때문에 해당 IF문을 타지 않는것 같습니다.

IsDBNull 메소드를 이용해봐도… 동작을 안합니다.

바쁘시겠지만 답변 부탁드리겠습니다.

1개의 좋아요

브레이크 포인트를 걸어 확인하셔야 할 것 같습니다.

제가 본 이 문서에 따르면 Exception이 나야 하는데 동작을 하지 않으셨다고 했으니,

while (mdr.Read()) { ... }

이 조건에서 false가 난 것 같아요.

3개의 좋아요

그런데 다시 보니 이 조건이 false 일 때가 질문하신 경우에 해당할 것 같아요.

브레이크 포인트를 걸고 한 번 확인해보세요.

Use breakpoints in the debugger - Visual Studio (Windows) | Microsoft Learn.

2개의 좋아요

감사합니다. 정말 큰 도움이 되었습니다. 너무너무 감사합니다.

2개의 좋아요