まず、パラメーターを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();
...そしてデバッガーを調べます。また、データベース内のフィールドのタイプも確認してください。これにより、実際に何が期待できるかがわかります。SqlDbType2つの間のマッピングの列挙を見てください。