Var переменная проблема - PullRequest
0 голосов
/ 29 марта 2019

Я использую этот код для получения данных из базы данных.Проблема заключается в запрос var , где я получаю сообщение об ошибке:

System.Exception: 'Указанное приведение недействительно.System.Data '

Выбор работает нормально Я использую SQL Server Management Studio.

В чем проблема?Код ниже:

SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Data Source=LAPTOP-QVQ8QR1I;" +
"Initial Catalog=BoneIDa2;" +
"Integrated Security=SSPI;";

List<StrukturaObrok> obrok = new List<StrukturaObrok>();

var query = "select u.pin, u.firstname Name, u.lastname Surname, " +
           "ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M1' then tmt.Price end)), '') as M1, " +
            "ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M2' then tmt.Price end)), '') as M2, " +
            "ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M3' then tmt.Price end)), '') as M3, " +
            "ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M4' then tmt.Price end)), '') as M4, " +
            "(select Price from TA_MealsType Where type = 'M1') M1Cijena, " +
            "(select Price from TA_MealsType Where type = 'M2') M2Cijena, " +
            "(select Price from TA_MealsType Where type = 'M3') M3Cijena, " +
            "(select Price from TA_MealsType Where type = 'M4') M4Cijena, " +
            "ISNULL(CONVERT(varchar(50), sum(case when tmt.type in ('M1', 'M2') then tmt.Price end)), '') as UkupnoM1_M2, " +
            "ISNULL(CONVERT(varchar(50), sum(case when tmt.type in ('M3', 'M4') then tmt.Price end)), '') as UkupnoM3_M4 " +
        "from users u " +
        "left join TA_Meals tm " +
        "on u.pin = tm.pin " +
        "left join TA_MealsType tmt " +
        "on tm.MealType = tmt.id " +
        "where u.department = 1000001001 "  +
        "group by u.pin, u.firstname, u.lastName"; 

SqlCommand SelectCommand = new SqlCommand(query, conn);
SqlDataReader myreader;
conn.Open();

myreader = SelectCommand.ExecuteReader();

while (myreader.Read())
{
    try
    {
        var ob = new StrukturaObrok(
            myreader.GetInt32(myreader.GetOrdinal("Pin")),
            myreader.GetString(myreader.GetOrdinal("Name")),
            myreader.GetString(myreader.GetOrdinal("Surname")),
            myreader.GetString(myreader.GetOrdinal("M1")),
            myreader.GetString(myreader.GetOrdinal("M2")),
            myreader.GetString(myreader.GetOrdinal("M3")),  
            myreader.GetString(myreader.GetOrdinal("M4")),
            myreader.GetInt32(myreader.GetOrdinal("M1Cijena")),
            myreader.GetInt32(myreader.GetOrdinal("M2Cijena")),
            myreader.GetInt32(myreader.GetOrdinal("M3Cijena")),
            myreader.GetInt32(myreader.GetOrdinal("M4Cijena")),
            myreader.GetString(myreader.GetOrdinal("UkupnoM1_M2")),
            myreader.GetString(myreader.GetOrdinal("UkupnoM3_M4"))
            );

        obrok.Add(ob);

    }

    catch (Exception ex)
    {
        throw new Exception(ex.Message + ' ' + ex.Source);
    }
}
return obrok;

1 Ответ

0 голосов
/ 29 марта 2019

Попробуйте изменить приведение myreader.GetInt32() в преобразование Convert.ToInt32(...), т. Е.

    var ob = new StrukturaObrok(
      // Conversion instead of Cast
      Convert.ToInt32(myreader["Pin"]),

      Convert.ToString(myreader["Name"]),
      Convert.ToString(myreader["Surname"]),
      Convert.ToString(myreader["M1"]),
      Convert.ToString(myreader["M2"]),
      Convert.ToString(myreader["M3"]),
      Convert.ToString(myreader["M4"]),            

      Convert.ToInt32(myreader["M1Cijena"]),
      Convert.ToInt32(myreader["M2Cijena"]),
      Convert.ToInt32(myreader["M3Cijena"]),
      Convert.ToInt32(myreader["M4Cijena"]),  

      Convert.ToString(myreader["UkupnoM1_M2"]),
      Convert.ToString(myreader["UkupnoM3_M4"])
    );

Код:

List<StrukturaObrok> obrok = new List<StrukturaObrok>();

connectionString = string.Join(";", 
  "Data Source=LAPTOP-QVQ8QR1I",
  "Initial Catalog=BoneIDa2",
  "Integrated Security=SSPI");

//DONE: wrap IDisposable into using
using (SqlConnection conn = new SqlConnection(connectionString)) {
  conn.Open();

  //DONE: Keep sql readable
  string sql =  
    @"select u.pin, 
             u.firstname Name, 
             u.lastname Surname, 
             ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M1' then tmt.Price end)), '') as M1, 
             ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M2' then tmt.Price end)), '') as M2, 
             ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M3' then tmt.Price end)), '') as M3, 
             ISNULL(CONVERT(varchar(50), sum(case when tmt.type = 'M4' then tmt.Price end)), '') as M4, 
             (select Price from TA_MealsType Where type = 'M1') M1Cijena, 
             (select Price from TA_MealsType Where type = 'M2') M2Cijena, 
             (select Price from TA_MealsType Where type = 'M3') M3Cijena, 
             (select Price from TA_MealsType Where type = 'M4') M4Cijena, 
             ISNULL(CONVERT(varchar(50), sum(case when tmt.type in ('M1', 'M2') then tmt.Price end)), '') as UkupnoM1_M2, 
             ISNULL(CONVERT(varchar(50), sum(case when tmt.type in ('M3', 'M4') then tmt.Price end)), '') as UkupnoM3_M4 
        from users u 
             left join TA_Meals tm on u.pin = tm.pin 
             left join TA_MealsType tmt on tm.MealType = tmt.id 
       where u.department = 1000001001 
    group by u.pin, u.firstname, u.lastName"; 

  //DONE: wrap IDisposable into using
  using (SqlCommand SelectCommand = new SqlCommand(sql, conn)) {
    using (var myreader = SelectCommand.ExecuteReader()) {
      while (myreader.Read()) {
        var ob = new StrukturaObrok(
          // Conversion instead of Cast
          Convert.ToInt32(myreader["Pin"]),

          Convert.ToString(myreader["Name"]),
          Convert.ToString(myreader["Surname"]),
          Convert.ToString(myreader["M1"]),
          Convert.ToString(myreader["M2"]),
          Convert.ToString(myreader["M3"]),
          Convert.ToString(myreader["M4"]),            

          Convert.ToInt32(myreader["M1Cijena"]),
          Convert.ToInt32(myreader["M2Cijena"]),
          Convert.ToInt32(myreader["M3Cijena"]),
          Convert.ToInt32(myreader["M4Cijena"]),  

          Convert.ToString(myreader["UkupnoM1_M2"]),
          Convert.ToString(myreader["UkupnoM3_M4"])
        );

        obrok.Add(ob); 
      }
    } 
  }
}

return obrok;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...