2017-04-18 157 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%' 

但信息的水平是相当缺乏的问题。