【发布时间】:2013-04-30 20:05:43
【问题描述】:
首先,我对编程很陌生,因此对细节的关注是值得赞赏的。
我目前有一个从 SQL 表接收数据的 asp 复选框列表。我遇到了一个问题,如果有 2 个项目完全相同,我的删除功能将删除这两个项目。以下是相关代码:
protected void btn_remove_Click(object sender, EventArgs e)
{
for (int i = 0; i < UPCList.Items.Count; i++)
{
if (UPCList.Items[i].Selected)
{
var item = UPCList.Items[i];
var frcID = item.Value;
_itemNumberRepository.Delete(frcID);
}
}
Response.Redirect("WebForm2.aspx");
Response.End();
}
public string Delete(string itemCode)
{
string connectionString = foobar
Int32 returnDeleted = 0;
string deleteUpcCode =
"DELETE FROM compare1 "
+ string.Format("WHERE itemcode = '{0}'",itemCode);
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(deleteUpcCode, connection);
command.Connection.Open();
returnDeleted = command.ExecuteNonQuery();
command.Connection.Close();
}
return returnDeleted.ToString();
}
有人告诉我使用 SQL 中的自动递增 ID,这样每一行都会有一个唯一的 ID,这样我就可以只删除选定的行。但是,我什至不知道如何做到这一点。我已经在 SQL 中为 itemcode 列打开了标识选项,但除此之外,我迷路了。如何使用该 ID 从 asp 中的复选框列表中仅删除选定的项目?
【问题讨论】:
-
将记录插入表时会自动生成Id。您只需要在您的 ASP 代码中使用这些 ID 号 (
<input type="checkbox" id="<%myIDVariable%>">) 然后根据该 ID 删除。 -
只是另一个友好的提醒,以这种方式创建 DELETE 查询(没有参数化)是一个坏主意:)
-
其他一些小事:Delete 方法不需要返回任何东西,它可以只是一个
void。addUpcCode变量的名称应该不同。 -
我这样做是因为我试图返回受 SQL 影响的行数并且失败得很惨。那是我这样做的尝试。这将是我接下来要做的事情......对于 addUpcCode......这是我复制/粘贴的好证据:P
标签: asp.net sql auto-increment checkboxlist