Объект не может быть приведен из DBNULL к исключению других типов при заполнении CartesianChart - PullRequest
0 голосов
/ 27 апреля 2020

Я получаю следующее исключение при попытке загрузить мой CartesianChart

Объект не может быть преобразован из DBNULL в другие типы

У меня следующий запрос это возвращает несколько NULL s

Вот мой SQL оператор:

   SELECT DATENAME(MONTH, d.OPENED) AS MonthValue, 
   AVG(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN DATEDIFF(day, d.DATERSLVD, d.OPENED) 
   ELSE 0 END) AS SmallCommercialIndust_avg, 
   AVG(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN DATEDIFF(day, d.DATERSLVD, d.OPENED) 
   ELSE 0 END) AS Residential_avg
   FROM hb_Disputes d
   WHERE YEAR(d.OPENED) = YEAR(GETDATE())
   GROUP BY DATENAME(MONTH, d.OPENED)
   ORDER BY MIN(d.OPENED);

Вот вывод:

MonthValue  SmallCommercialIndust_avg     Residential_avg
----------------------------------------------------------
January             0                         0
February            0                         0
March               NULL                      0
April               0                         0
May                 0                         NULL
June                0                         NULL
July                73                        0
August              123                       0
September           0                         136
October             166                       0
November            169                       0
December            0                         NULL

Вот мой WPF код для загрузки моего CartesianChart:

        private void ChartValues()
    {
        // Defines the variable for differnt lines.
        List<double> allValues = new List<double>();
        List<double> someValues = new List<double>();


        try
        {
            SqlConnection connection = new SqlConnection("Data Source=WINDOWS-B1AT5HC\\SQLEXPRESS;Initial Catalog=CustomerRelations;Integrated Security=True;");


            string selectQuery = ("SELECT DATENAME(MONTH, OPENED) AS MonthValue, SUM(CASE WHEN d .ASSGNTO = 'E099255' AND d .REV_CLS = 2 THEN 1 ELSE 0 END) AS SmallCommercialIndust, AVG(CASE WHEN d .ASSGNTO = 'E099255' AND d.REV_CLS = 2 THEN DATEDIFF(day, d.DATERSLVD, d.OPENED) ELSE 0 END) AS SmallCommercialIndust_avg, SUM(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN 1 ELSE 0 END) AS Residential, AVG(CASE WHEN d.ASSGNTO = 'E099255' AND d.REV_CLS <> 2 THEN DATEDIFF(day, d.DATERSLVD, d.OPENED) ELSE 0 END) AS Residential_avg FROM hb_Disputes AS d WHERE(YEAR(OPENED) = YEAR(GETDATE())) GROUP BY DATENAME(MONTH, OPENED) ORDER BY MIN(OPENED)");
            connection.Open();
           using  SqlCommand command = new SqlCommand(selectQuery, connection);

            SqlDataReader sqlReader = command.ExecuteReader();

            while (sqlReader.Read())
            {

                {
                    // Select the values from the columns selected 
                    allValues.Add(Convert.ToDouble(sqlReader["SmallCommercialIndust_avg"]));
                    someValues.Add(Convert.ToDouble(sqlReader["Residential_avg"]));
                }
                // Starts new line series.
                SeriesCollection = new SeriesCollection
                {
                    new LineSeries
                    {
                        Title = "Residential",
                        Values = new ChartValues<double>(allValues),
                        LineSmoothness = 1, //0: straight lines, 1: really smooth lines

                    },
                    new LineSeries
                    {
                        Title = "Small Commercial Indust",
                        Values = new ChartValues<double>(someValues),
                        LineSmoothness = 1, //0: straight lines, 1: really smooth lines

                    }
                    };

                    Labels = new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
                    YFormatter = value => value.ToString("N");

                    DataContext = this;
            }
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }            
    }

1 Ответ

0 голосов
/ 28 апреля 2020

Вам необходимо проверить DBNull перед присвоением переменной

    // Check for DBNull and then assign the variable
    if (sqlReader["SmallCommercialIndust_avg"] != DBNull.Value)
    SmallCommercialIndustValues.Add(Convert.ToInt32(sqlReader["SmallCommercialIndust_avg"]));

    // Check for DBNull and then assign the variable
    if (sqlReader["Residential_avg"] != DBNull.Value)
    ResidentialValues.Add(Convert.ToInt32(sqlReader["Residential_avg"]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...