この問題はSQLとは関係がなく、C#で文字列と変数を使用することと関係があります。
変数の値をC#の文字列に挿入するために、変数の名前を文字列に配置することはできません。文字列は、変数が含まれていることを「認識」していません。代わりに機能するいくつかのアプローチを次に示します。
double totalPrice = 1.1;
// string concatenation
string sqlUpd =
"UPDATE Racun SET Znesek_nakupa='" +
totalPrice +
"' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)";
// with string.Format
string sqlUpd = string.Format(
"UPDATE Racun SET Znesek_nakupa='{0}' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun)",
totalPrice);
ただし、このようにSQLクエリに変数の値を埋め込むだけのアプローチは、SQLインジェクション攻撃のリスクがあるため、ベストプラクティスとは見なされません。通常、パラメータ化されたSQLクエリを使用する必要があります。
クエリのパラメータ化されたバージョンは次のようになります(上記にリンクされているページから例を持ち上げます):
SqlConnection conn = new SqlConnection(_connectionString);
conn.Open();
string s = "UPDATE Racun SET Znesek_nakupa='@totalPrice' WHERE Id_racun= (SELECT MAX(Id_racun) FROM Racun";
SqlCommand cmd = new SqlCommand(s);
cmd.Parameters.Add("@totalPrice", totalPrice);
SqlDataReader reader = cmd.ExecuteReader();