まず、パラメーターをSQLに直接配置するのではなく、パラメーター化されたSQLを使用する必要があります。また、完了したら、using
ステートメントを使用してコマンド(および接続)を閉じる必要があります。SqlConnection
ああ、そして操作ごとに新しいものを作成します。だから次のようなもの:
public int GetProductPrice(string productName)
{
// Quite possibly extract the connection creation into a separate method
// to call here.
using (var conn = new SqlConnection(...))
{
conn.Open();
using (var command = new SqlCommand(
"SELECT ProductPrice FROM Products WHERE ProductName = @ProductName",
conn))
{
command.AddParameter("@ProductName", SqlDbType.VarChar)
.Value = productName;
object price = command.ExecuteScalar();
// And you'd do the casting here
}
}
}
ProductPrice
次に、フィールドのタイプがわかりません。返品されている可能性があります。long
または、おそらくそれdecimal
です。見つける最も簡単な方法は、次を使用することです。
object tmp = cmd.ExecuteScalar();
...そしてデバッガーを調べます。また、データベース内のフィールドのタイプも確認してください。これにより、実際に何が期待できるかがわかります。SqlDbType
2つの間のマッピングの列挙を見てください。