First the important, always use sql-parameters to prevent sql-injection. Never concatenate parameters into a sql-query. This can also solve localization or "escaping" issues.
Also, use the using statement to ensure that anything using unmanaged resources (like a sql-connection) will be closed and disposed even on error:
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();
}
Side-note: if you have an identity column and you want to retrieve the newly created primary-key, use SCOPE_IDENTITY and ExecuteScalar even if you use 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();
It gives following messageWhat is it?objcmd.Paramters.Add(name, value)).