最初に重要なのは、常に sql-parameters を使用して sql-injection を防ぐことです。パラメータを sql-query に連結しないでください。これにより、ローカリゼーションまたは「エスケープ」の問題も解決できます。
また、using
ステートメントを使用して、管理されていないリソース (SQL 接続など) を使用するものはすべて閉じられ、エラーが発生した場合でも破棄されるようにします。
string sql = @"
INSERT INTO MeterReading(MachineName,LastReading,CurrentReading,Consumption)
VALUES(@MachineName,@LastReading,@CurrentReading,@Consumption)";
using(var objsqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["Conn"].ToString()))
using (var cmd = new SqlCommand(sql, objsqlconn))
{
cmd.Parameters.AddWithValue("@MachineName", TextBox1.Text);
cmd.Parameters.AddWithValue("@LastReading", TextBox2.Text);
cmd.Parameters.AddWithValue("@CurrentReading", TextBox3.Text);
cmd.Parameters.AddWithValue("@Consumption", TextBox4.Text);
objsqlconn.Open();
int insertedCount = cmd.ExecuteNonQuery();
}
補足: ID 列があり、新しく作成された主キーを取得する場合は、次を使用する場合でも、SCOPE_IDENTITY
andを使用します。ExecuteScalar
INSERT INTO
string sql = @"
INSERT INTO MeterReading(MachineName,LastReading,CurrentReading,Consumption)
VALUES(@MachineName,@LastReading,@CurrentReading,@Consumption);
SELECT CAST(scope_identity() AS int)";
//...
int newID = (int)cmd.ExecuteScalar();