我正在尝试使用以下代码将数据插入ASP.NET中的数据库:
string conn = "TJLDatabaseConnectionString";
conn = ConfigurationManager.ConnectionStrings["Conn"].ToString();
SqlConnection objsqlconn = new SqlConnection(conn);
objsqlconn.Open();
SqlCommand objcmd = new SqlCommand("Insert into MeterReading(MachineName,LastReading,CurrentReading,Consumption) Values('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "')", objsqlconn);
objcmd.ExecuteNonQuery();
//MessageBox.Show("Successful");
但是当我跑的时候。它给出了以下信息:
答案 0 :(得分:2)
首先重要的是,总是使用sql-parameters来防止sql注入。切勿将参数连接到sql-query中。这也可以解决本地化或“逃避”问题。
此外,使用using
语句确保使用非托管资源(如sql-connection)的任何内容都将被关闭并在出错时处理:
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();
}
旁注:如果您有一个标识列并且想要检索新创建的主键,即使您使用SCOPE_IDENTITY
,也要使用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();
答案 1 :(得分:0)
由于您的问题中没有任何例外提及,所以只是为了更好和可读的代码,我建议您也使用块。它为您提供了漂亮,清晰和可读的代码,并在超出范围时处理对象。
这适用于我们在编码时通常遵循的良好做法。请告诉我们适当解决方案的例外情况。
private void ConnectToDb()
{
var conn = ConfigurationManager.ConnectionStrings["Conn"].ConnectionString;
using( var conn = new SqlConnection(conn))
{
conn.Open();
var cmdtxt ="Insert into MeterReading(MachineName,LastReading,CurrentReading,Consumption)
Values(@P1,@P2,@P3,@P4)";
using(var cmd = new SqlCommand(cmdtxt, conn))
{
cmd.CommandType=CommandType.Text;
cmd.Parameters.AddWithValue("@P1", TextBox1.Text);
cmd.Parameters.AddWithValue("@P2", TextBox2.Text);
cmd.Parameters.AddWithValue("@P3", TextBox3.Text);
cmd.Parameters.AddWithValue("@P4", TextBox4.Text);
cmd.ExecuteNonQuery();
}
con.close();
}
}
答案 2 :(得分:0)
使用变量检查行是否受到影响
rowAffected= objcmd.ExecuteNonQuery();
if(rowAffected >0)
{
//sucessful
}
else
{
//
}