【发布时间】:2013-01-14 20:24:02
【问题描述】:
我有一个示例网站,您可以在其中输入您的电子邮件地址并将其插入 MS SQL 数据库。在下一页上,GridView 显示了数据库中的列表。现在我需要添加一个删除地址的函数,但它必须验证该地址当前是否为
public partial class Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = GetLastWriteTime(Request.PhysicalPath).ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
string data = DateTime.Now.ToLongDateString() + "," + DateTime.Now.ToLongTimeString() + ": ";
SqlDataSource1.InsertCommand = "INSERT INTO ListaAdresow (Email) Values('" + TextBox1.Text + "')";
try
{
SqlDataSource1.Insert();
Label2.Text += data + "added into database: " + TextBox1.Text + "<br/>";
TextBox1.Text = "";
}
catch (Exception ex)
{
Label2.Text += data + ex.Message;
}
}
protected void Button2_Click(object sender, EventArgs e)
{
string data = DateTime.Now.ToLongDateString() + "," + DateTime.Now.ToLongTimeString() + ": ";
SqlDataSource1.DeleteCommand = "DELETE FROM ListaAdresow WHERE Email='" + TextBox1.Text + "'";
SqlDataSource1.SelectCommand = "SELECT FROM [ListaAdresow] WHERE Email=" + TextBox1.Text;
try
{
SqlDataSource1.Delete();
Label2.Text += data + "removed from database: " + TextBox1.Text + "<br/>";
TextBox1.Text = "";
}
catch (Exception ex)
{
Label2.Text += data + ex.Message;
}
}
}
【问题讨论】:
-
第 1 步。阅读SQL Injection。
-
不检查数据库就删除也没关系。如果它不存在它不会抛出错误,如果它存在它将被删除。正如弗莱姆建议研究 EF,并使用它连接到 SQL SERVER,使用这样的字符串进行数据操作可能很危险。
-
第 2 步。了解原因后,将查询更改为存储过程或 EF。
-
此外,您的删除命令将删除具有相同电子邮件的每个条目,如果这是您想要的,那很好。但是,如果同一电子邮件可以有多个条目,那么我建议使用唯一 ID,并使用它进行插入/更新/删除。
标签: c# asp.net .net sql-server tsql