在ASP.NET抛出异常中将数据插入数据库

时间:2013-10-11 08:26:40

标签: asp.net

我正在尝试使用以下代码将数据插入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");

但是当我跑的时候。它给出了以下信息:

3 个答案:

答案 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,也要使用ExecuteScalarINSERT 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
              {
                //
              }