2016-03-08 2 views
1

Я новичок в программировании и хочу попытаться рассчитать Сколько мужчин и женщин в моей базе данных sql! Спасибо!Как подсчитать одинаковые элементы или конкретные критерии в одном столбце с помощью C#?

try 
     { 
      string stmt = "SELECT COUNT (Gender) FROM info where Gender is Male "; 
      //string stmt = "SELECT COUNT (Gender) FROM info where Gender is Female "; 
      int count = 0; 
      SqlConnection con = new SqlConnection(constring); 
      { 
       SqlCommand cmd = new SqlCommand(stmt, con); 
       { 
        con.Open(); 
        count = (int)cmd.ExecuteScalar(); 
        con.Close(); 
       } 
      } 
      label1.Text = "There are " + count.ToString() + " Male in your database"; 
      //label2.Text = "There are " + count.ToString() + " Female in your database"; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
+0

Что он сейчас делает? Вызывает ли это исключение? Если да, какая ошибка? –

+0

Работает ли этот код? Вы просите какой-то способ, который делает что-то конкретное, или этот код не работает? Если код не работает, каковы ваши данные? –

ответ

2

Вы можете найти как в одном запросе:

try 
{ 
    string stmt = "SELECT SUM(case when Gender='Male' then 1 else 0 end) AS MaleCount, 
          SUM(case when Gender='Female' then 1 else 0 end) AS FemaleCount 
        FROM info"; 
    int mcount = 0; 
    int fcount = 0; 
    SqlConnection con = new SqlConnection(constring); 
    { 
     SqlCommand cmd = new SqlCommand(stmt, con); 
     { 
      con.Open(); 
      SQLDataReader reader = cmd.ExecuteReader(); 
      while (reader.Read()) 
      { 
       mcount = (int) reader["MaleCount"]; 
       fcount = (int) reader["FemaleCount"]; 
      } 
      con.Close(); 
     } 
    } 
    label1.Text = "There are " + mcount.ToString() + " Male in your database"; 
    label2.Text = "There are " + fcount.ToString() + " Female in your database"; 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
3

Вам нужно знать, какие значения находятся в столбце «Пол». Это «мужские» и «женские», «M» и «F», 1 и 2 (в этом примере я принимаю числовую колонку) или что-то еще? Если бы это было «Мужской» и «женщина» ваш SQL заявление может выглядеть

SELECT COUNT (Gender) FROM info where Gender = 'Male' 

Попробуйте инструкцию SQL в SQL Server Management Studio. Когда результаты будут выглядеть правильно, переместите их в свой код на C#. Когда вы переместите его на свой код C#, убедитесь, что вы не принимаете никаких входных данных из пользовательского интерфейса в рамках вашего запроса. Если вам нужно, чтобы пользователь мог повлиять на запрос, прочитайте о параметризованных запросах, чтобы избежать возникновения огромной проблемы безопасности.

0

Это может сделать трюк для вас

string stmt = "SELECT COUNT(Gender) FROM info where Gender = 'Male'"; 
//string stmt = "SELECT COUNT(Gender) FROM info where Gender = 'Female'"; 
3

Попробуйте SQL заявление

SELECT COUNT(*) people, 
     Gender 
    FROM info 
    GROUP BY Gender 

Это даст вам обратно две строки, одна с числом Female, а другая с числом Male строк.

ExecuteScalar - неправильный метод для такого рода вещей. Вам нужно использовать ExecuteReader, а затем прочитать строки.

Смежные вопросы