我将如何从 sql 数据库中删除一行,无论是否使用存储过程,现在我已经尝试过使用按钮按下。到目前为止,这是我所拥有的,_memberid 已从数据库中的不同形式发送过来(对于上下文)。
private void btnDelete_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = Lib.SqlConnection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Delete * From Members where MemberId = " + _memberId;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.DeleteCommand = cmd;
adapter.Fill(MembersDataTable); // Im fairly sure this is incorrect but i used it from old code
DialogResult = DialogResult.OK;
}
我基本上看到了三个主要的东西......
一
您不需要*
查询中的 。DELETE
影响整行,因此无需指定列。所以就像这样:
DELETE FROM SomeTable WHERE SomeColumn = 123
二
这里不需要 a SqlDataAdapter
,您需要做的就是执行 query。例如:
cmd.ExecuteNonQuery();
“非查询”基本上是一个 SQL 命令,它不查询结果数据。在这种情况下,插入、更新和删除通常是“非查询”。它将返回的只是受影响的行数,如果需要,您可以使用它来仔细检查它是否与您的期望相匹配。
三
不要这样做:
cmd.CommandText = "Delete From Members where MemberId = " + _memberId;
这种字符串连接会导致SQL 注入。虽然它直观上看起来像是您_memberId
用作查询值,但从技术上讲,您将其用作可执行代码。对于数值来说,不太可能(尽管并非不可能)成为问题,但对于字符串值来说,这是一个巨大的问题,因为这意味着用户可以向您发送任何字符串,而您将其作为代码执行。
相反,使用查询参数。例如,您可能会执行以下操作:
cmd.CommandText = "Delete From Members where MemberId = @memberId";
cmd.Parameters.Add("@memberId", SqlDbType.Int);
cmd.Parameters["@memberId"].Value = _memberId;
这告诉数据库引擎本身该值是一个值而不是正在执行的查询的一部分,并且数据库引擎知道如何安全地处理值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句