2011-09-09 31 views
0

問題が少しあります。私はプログラムのSQL Serverデータベースからいくつかの値を取得しています。それらの値を計算してから計算した値をデータベースに書き戻します。しかし、いくつかの値は私に与えている"Error Invalid column name 'NaN'."実際には、この問題の原因となっている列に固有のものはありません。これらは、完全に動作している列と同じ浮動小数点型の列です。SQL Serverエラー無効な列名 'NaN'

con.Open(); 

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

AddPhase1Calc.ExecuteNonQuery(); 


con.Close(); 

十分なコードであるかどうかはわかりませんが、これが問題の原因となっている最初の列です。

+0

警告です。あなたのコードはSQLインジェクション攻撃の影響を受けやすいです。 –

+0

@Daniel:Make_Up_Deprがどこから来るかによって異なります。ユーザーからの入力でない場合は、それほど難しくありません。 – Joe

+0

真実ですが、依然として伝えるのは難しいです。 –

答えて

0

私は、Make_Up_Deprがdoubleであると推測していますが、その計算でゼロを0で割った値が評価されることもあります。どちらのNaNという値になり、そして(それがdouble値ではありませんので、...)SQL列名/エイリアスにそれを評価しようとしている

+1

NaNでゼロ除算が行われる言語は見たことがありません。 – NullUserException

+0

申し訳ありません、ゼロを0で割った値です。 http://msdn.microsoft.com/en-us/library/system.double.nan.aspx – Joe

+0

私はゼロで割っていたカラムを修正してくれてありがとうございました。 – Aaron

1

あなたは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(); 
    } 
} 
0

一つ、Make_Up_DeprまたはaのいずれかがNaNに評価しています。これは文字列なので、SQL Serverはその名前で列を参照しようとしていると考えます。

関連する問題