2013-10-17 2 views
0

저는 프로그래밍 및 C#에 익숙하지 않아서 클라이언트 이름, 전화 및 주소를 저장할 수있는 SQL 서버에 연결된 작은 응용 프로그램을 만들려고합니다. 나는 이미 "존재한다면 데이터를 확인하고있다"라는 한 가지 문제에 직면하고있다. 항상 null이 아니며 저장할 수 없다는 것을 말하고있다. 나는 약간의 도움에 감사드립니다. 나는 그것이 매우 멍청하고 귀찮게해서 미안하다는 것을 안다.C# - 쿼리가 null이되지 않습니다?

 //Create and Open Connection 
     SqlConnection con = new SqlConnection("Data Source=KDC-LP\\SQLEXPRESS;Initial Catalog=ClientsDB;Integrated Security=True"); 
     SqlDataReader reader = null; 
     con.Open(); 

     //Finding if data already exists 
     SqlCommand cmd = new SqlCommand("select name from clients where name = @name or phone1 in (@phone1, @phone2, @phone3) ", con); 
     cmd.Parameters.AddWithValue("@name", textbox1.Text); 
     cmd.Parameters.AddWithValue("@phone1", textbox2.Text); 
     cmd.Parameters.AddWithValue("@phone2", textbox3.Text); 
     cmd.Parameters.AddWithValue("@phone3", textbox4.Text);    
     reader = cmd.ExecuteReader(); 

     //Saving or not ? 
     MessageBoxResult msg = MessageBox.Show("Are you sure you want to save the new data", " Save", MessageBoxButton.YesNo, MessageBoxImage.Question); 
     switch (msg) 
     { 
      case MessageBoxResult.Yes: 

       if (reader != null) //Name, Phones already exists 
       { 
        reader.Close(); 
        MessageBoxResult notsaved = MessageBox.Show("Data already exists please check", "Save", MessageBoxButton.OK, MessageBoxImage.Warning); 
       } 
       else 
       { 
        //Saving 
        reader.Close(); 
        SqlCommand cmdins = new SqlCommand("INSERT INTO Clients (name,phone1,phone2,phone3,address) Values ('" + textbox1.Text + "', '" + textbox2.Text + "', '" + textbox3.Text + "', '" + textbox4.Text + "', '" + textbox5.Text + "')", con); 
        cmdins.ExecuteNonQuery(); 
        textbox1.Clear(); 
        textbox2.Clear(); 
        textbox3.Clear(); 
        textbox4.Clear(); 
        textbox5.Clear(); 
        MessageBoxResult saved = MessageBox.Show("Data is Saved", "Save", MessageBoxButton.OK, MessageBoxImage.Information); 
       } 
       break; 

       //Not Saving 
      case MessageBoxResult.No: 
       { 
        MessageBoxResult msgno = MessageBox.Show("Data is not saved", "Save", MessageBoxButton.OK, MessageBoxImage.Warning); 
       } 
       break; 
     } 

     //Closing Connection 
     con.Close(); 
+2

당신은'cmd.ExecuteReader()를 말한다; ''SqlDataReader'를 항상 반환하므로'reader'는'null'이 될 수 없습니다. –

답변

1

ExecuteReader은 항상 독자를 반환합니다. 쿼리가 데이터를 찾지 못하면 리더가 여전히 반환됩니다. 어떤 데이터도 "포함하지"않습니다. 그래서 당신이 확인해야 할 것입니다 :

if (reader.HasRows) //Name, Phones already exists 
2

HasRows 속성은 쿼리가 행을 반환 여부를 알려줍니다, 당신은을 사용해야합니다

  if (reader.HasRows) //Name, Phones already exists 
      { 
       reader.Close(); 
       MessageBoxResult notsaved = MessageBox.Show("Data already exists please check", "Save", MessageBoxButton.OK, MessageBoxImage.Warning); 
      } 
+0

그래서 쿼리가 비어 있는지 확인하는 방법은 무엇입니까? 독자가 항상 뭔가를 반환하는 경우 쿼리가 비어 있거나 데이터가 포함되어 있는지 어떻게 알 수 있습니까? –

+0

'HasRows'는 부울 속성입니다. _true_는 쿼리에서 반환 된 행/레코드를 의미하고 결과는 비어 있지 않습니다. _false이면 쿼리는 레코드를 반환하지 않고 결과는 비어 있음을 의미합니다. – Coder

관련 문제