Ошибка SQL Server Неверное имя столбца 'NaN' - PullRequest
1 голос
/ 09 сентября 2011

У меня есть небольшая проблема.Я получаю некоторые значения из базы данных SQL Server моей программы, выполняю с ними некоторые вычисления, а затем записываю вычисленные значения обратно в базу данных.Однако некоторые значения дают мне "Error Invalid column name 'NaN'." На самом деле нет ничего уникального в столбцах, которые вызывают эту проблему.Это те же столбцы типа float, что и столбцы, которые работают отлично.

con.Open();

AddPhase1Calc = new SqlCommand("UPDATE Asset SET Make_Up_Depr = " + Make_Up_Depr + " WHERE Asset_ID = " + a, con);

AddPhase1Calc.ExecuteNonQuery();


con.Close();

Я не уверен, достаточно ли этого кода, но это первый столбец, который вызывает у меня проблему.

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

Вам нужно поместить одинарные кавычки вокруг значения Make_Up_Depr:

AddPhase1Calc = new SqlCommand("UPDATE Asset SET Make_Up_Depr = '" + Make_Up_Depr +
    "' WHERE Asset_ID = " + a, con);

Кроме того, вы никогда не должны создавать оператор SQL таким образом. Вы открыты для атак с использованием SQL-инъекций, если переменная поступает от пользователя. Вместо этого вы должны использовать параметры.

Наконец, этот код должен находиться в блоке using:

using (SqlConnection con = whatever)
{
    con.Open();

    using (AddPhase1Calc = new SqlCommand("UPDATE Asset SET Make_Up_Depr = '" + 
      Make_Up_Depr + "' WHERE Asset_ID = " + a, con))
    {
        AddPhase1Calc.ExecuteNonQuery();
    }
}
1 голос
/ 09 сентября 2011

Я собираюсь догадаться, что Make_Up_Depr - это двойное число, и в некоторых случаях при вычислении вычисляется ноль, деленный на ноль. В результате значение равно NaN, а SQL пытается преобразовать его в имя / псевдоним столбца (поскольку это не двойное значение ...)

0 голосов
/ 09 сентября 2011

Одно из ваших значений, Make_Up_Depr или a, оценивается как NaN. Поскольку это строка, SQL Server считает, что вы пытаетесь сослаться на столбец с этим именем.

...