2017-04-18 149 views
-2

這是我獲取百分比的代碼,但返回一個空數組。不知道如何解決它從數據庫獲取數據時出錯

List<Employee> employees = new List<Employee>(); 
SqlConnection conn = new SqlConnection("data source=***.***.***.***;initial catalog=***;persist security info=True;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework"); 

using (conn) 
{ 
    SqlCommand cmd = new SqlCommand("SELECT (CAST(Availability as int)/CAST(Functionality as int))*100 from Vu_EquipmentInfo where Vu_EquipmentInfo.MonitoringDate like " + year + "-" + month, conn); 
    SqlDataReader reader = cmd.ExecuteReader(); 

    while(reader.Read()) 
    { 
     Employee employee = new Employee(); 
     employee.Sanctioned_Post = Convert.ToString(reader\["Availability"\]); 
     // employee.Fill_Post = Convert.ToChar(reader\["District"\]); 
     employees.Add(employee); 
    } 

    JavaScriptSerializer js = new JavaScriptSerializer(); 
    Context.Response.Write(js.Serialize(employees)); 
} 

enter image description here

+0

當你在數據庫中運行這個'select'命令時,你會得到什麼? –

+0

像這樣的空陣列[] –

+0

首先,您的查詢是Sql注入攻擊的開放門戶。閱讀關於參數化的問題。其次,你必須在using語句中聲明和實例化SqlConnection。 –

回答

0

因此,在第一 - 開放連接。

接下來,將您的select修復爲select 'exp' as Availability

List<Employee> employees = new List<Employee>(); 
      SqlConnection conn = new SqlConnection("data source=***.***.***.***;initial catalog=***;persist security info=True;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework"); 
      await conn.OpenAsync(); 
      using (conn) 
      { 
       SqlCommand cmd = new SqlCommand("SELECT (CAST(Availability as int)/CAST(Functionality as int))*100 as Availability from Vu_EquipmentInfo where Vu_EquipmentInfo.MonitoringDate like " + year + "-" + month, conn); 
       SqlDataReader reader = await cmd.ExecuteReaderAsync(); 
       while (await reader.ReadAsync()) 
       { 
        Employee employee = new Employee(); 
        employee.Sanctioned_Post = Convert.ToString(reader["Availability"]); 
        employees.Add(employee); 
       } 
       JavaScriptSerializer js = new JavaScriptSerializer(); 
       await Context.Response.WriteAsync(js.Serialize(employees)); 
      } 
0

如果MonitoringDate是一個字符串,你應該把它串聯(對於年份和月份假設值)的字符串

Vu_EquipmentInfo.MonitoringDate like 2017-12 

也許你想比較後這樣...考慮你where條款這樣的東西,而不是

Vu_EquipmentInfo.MonitoringDate like '2017-12%' 

但信息的水平是相當缺乏的問題。