0

我正在尝试在我的 Web 应用程序中使用 1 个按钮更新 2 个不同的表。我目前正在使用 asp.net 来开发我的网络应用程序。我想知道是否可以从 2 个不同的表中更新 2 个不同的列。

这是我的后端代码

 protected void btnAssign_Click(object sender, EventArgs e)
    {
        //SqlConnection connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI");

        //connAdd.Open();
        //string mySQL;
        //mySQL = "Update LoginRegisterPoliceOfficer Set caseid ='" + lblCID.Text + "' where fullname ='" + DDLpolice.SelectedItem.Text + "'";
        //SqlCommand cmdAdd = new SqlCommand(mySQL, connAdd);
        //cmdAdd.ExecuteNonQuery();

        //connAdd.Close();



        SqlConnection connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI");

        connAdd.Open();
        string mySQLL;
        mySQLL = "Update Report Set handle = 'handled' where caseid='"+lblCID.Text+"'";
        SqlCommand cmdAdd = new SqlCommand(mySQLL, connAdd);
        cmdAdd.ExecuteNonQuery();

        connAdd.Close();


    }

我只能更新 1,但无法更新 2。因此,我注释掉了我的一个 sql 代码。

4

2 回答 2

1

如果您对两个表使用相同的数据库,则无需关闭和打开连接。使用相同的连接,依次执行 2 个语句。

protected void btnAssign_Click(object sender, EventArgs e)
{
    using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI"))
    {
        connAdd.Open();
        var sql = "Update LoginRegisterPoliceOfficer Set caseid ='" + lblCID.Text + "' where fullname ='" + DDLpolice.SelectedItem.Text + "'";
        using(var cmdAdd = new SqlCommand(sql, connAdd)) 
        {
            cmdAdd.ExecuteNonQuery();
        }

        sql = "Update Report Set handle = 'handled' where caseid='"+lblCID.Text+"'";
        using (var cmdAdd = new SqlCommand(mySQLL, connAdd)) 
        {
              cmdAdd.ExecuteNonQuery();
        }

        connAdd.Close();
    }
}

需要using 语句,以便 .NET 运行时回收在对象被销毁时可能丢失的内存,如果没有它们,您的代码会引入内存泄漏,这可能会影响您网站的性能(除其他外)。

var 语句是声明变量的简洁方式。当变量的类型基于符号的右侧很明显时,我喜欢使用它=,否则,代码看起来冗余和冗长。

最后,这段代码很容易受到sql注入攻击。使用发布的值构造 sql 可能非常危险。如果 lblCID.Text 的值为 '(drop table LoginRegisterPoliceOfficer)' 怎么办?执行查询的更安全方法是使用存储过程或sql 参数

于 2013-05-17T01:05:30.540 回答
0

是的你可以。您应该能够在单个 ASP.NET 函数中执行任意数量的更新,前提是您不会遇到超时或意外关闭您想要保持打开状态的内容。

让 SqlConnection 对象保持打开状态,并创建两个 sqlCommand 实例。或者将您的两个更新作为单个字符串发送,它们之间有一个换行符和一个分号。或者将逻辑移到服务器端,并有一个知道更新它们的存储过程。(你能做一个可更新的视图吗?)

于 2013-05-17T01:08:08.660 回答