2013-11-11 2 views
0

Этот запрос был выполнен в базе данных.Возврат общего количества из базы данных в C#

select COUNT(*) from Patient_Data where DummyValue = 'Y'; 

104 

Я должен получить эту number (104) от database к asp.net with c# так, что, когда счетчик становится равным нулю, я должен disable a button, Как retrieve этот номер из базы данных в коде. Он должен храниться как integer.

Я попробовал эти строки кода в C#

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand("select COUNT(*) as PatientCount from Patient_Data where DummyValue = 'Y' ", cn)) 
     { 
      try 
      { 

       cn.Open(); 

       using (SqlDataReader rdr = cmd.ExecuteReader()) 
       { 
        int Patcount; 
        if (rdr.Read()) 
        { 
         //Code Required 

        } 
       } 
      } 
      catch (Exception ex) 
      { 

       // handle errors here 
      } 

     } 


    } 

ответ

1

Я решил проблему с этими строками кода.

 using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand("select COUNT(*) as PatientCount from Patient_Data where DummyValue = 'Y' ", cn)) 
     { 
      try 
      { 

       cn.Open(); 

       using (SqlDataReader rdr = cmd.ExecuteReader()) 
       { 
        //int Patcount; 
        if (rdr.Read()) 
        { 
         int Patcount = int.Parse(rdr["PatientCount"].ToString()); 
         if (Patcount != 0) 
         { 
          Label3.Visible = true; 
          Label3.Text = "You have already have "+Patcount+" dummy records,Please update those records by clicking Update Dummy Records Link."; 
          btnSkipSubmit.Visible = false; 
         } 
         //Code Required 


        } 
       } 
      } 
      catch (Exception ex) 
      { 

       // handle errors here 
      } 

     } 


    } 
2

использование псевдонима, чтобы получить количество, как показано ниже:

select COUNT(*) as PatientCount from Patient_Data where DummyValue = 'Y'; 

Считайте значение PatientCount в коде.

Вы можете использовать функцию GetInt32(), чтобы получить count как int.
Примечание: вы передаете значения параметров в своем запросе, что приводит к Sql Injection Attacks, поэтому вы можете использовать Parameterized Sql Queries, чтобы избежать их.

пример кода asbelow:

private int readPatientData() 
     { 
      int PatientCount = 0;    
      String strCommand = "select COUNT(*) as PatientCount from Patient_Data where DummyValue = @MyDummyValue"; 
      using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString)) 
      { 
       sqlConnection.Open(); 
       using (SqlCommand sqlcommand=new SqlCommand(strCommand,sqlConnection)) 
       { 
        sqlcommand.Parameters.Add(new SqlParameter("MyDummyValue", 'Y')); 
        SqlDataReader sqlReader = sqlcommand.ExecuteReader(); 
        if (sqlReader.Read()) 
         PatientCount = sqlReader.GetInt32(0); 
       } 
      } 
      return PatientCount; 
     } 
+0

Просьба проверить измененный ответ с кодом. –

0

Как мне известно Есть три способа сделать это:

  1. Использование COUNT вы можете сделать это, как показано ниже:

    выберите COUNT (*) как RowCount из Patient_Data, где DummyValue = 'Y';

  2. Использование ROW_NUMBER вы можете сделать это, как показано ниже:

    Выберите ROW_NUMBER() OVER (ORDER BY Patient_Data.ID DESC) AS RowNumber от Patient_Data где DummyValue = 'Y';

  3. И есть другой способ, но этот способ заключается только в том, чтобы получить количество строк и является самым быстрым способом получить количество строк в sql-сервере по мне.

    ВЫБОР TOTAL_ROWS = SUM (st.row_count) ИЗ sys.dm_db_partition_stats ул ГДЕ имя_объекта (object_id) = 'Patient_Data' И (index_id < 2)

Это все

0

Обновление основывается на подмене кода.

Вы можете написать rdr.GetInt32(3); вместо code required в вашем коде.

предыдущий ответ

Вы должны использовать ExecuteScalar метод во время выполнения вашей команды.Вот пример из msdn:

static public int AddProductCategory(string newName, string connString) 
{ 
    Int32 newProdID = 0; 
    string sql = 
     "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); " 
     + "SELECT CAST(scope_identity() AS int)"; 
    using (SqlConnection conn = new SqlConnection(connString)) 
    { 
     SqlCommand cmd = new SqlCommand(sql, conn); 
     cmd.Parameters.Add("@Name", SqlDbType.VarChar); 
     cmd.Parameters["@name"].Value = newName; 
     try 
     { 
      conn.Open(); 
      newProdID = (Int32)cmd.ExecuteScalar(); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
    } 
    return (int)newProdID; 
} 

В этом примере они возвращают вновь добавленный идентификатор продукта.

ExecuteScalar возвращает объект, который вы можете проверить на нуль и наложить на номер, как вы знаете, с помощью метода int.parse или лучшего, который вы знаете.

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