我正在尝试按ID删除条目。我想通知用户他们尝试删除的ID不存在。它不会产生任何问题,但我想让一切都清楚。
怎么做?我必须使用SQL字符串吗?
我正在使用MS Access 2007,这就是我删除项目的方式:
string SQL = "DELETE FROM PersonalData WHERE DataID = " + txtEntryID.Text;
private void DeleteData(string SQL)
{
// Creating an object allowing me connecting to the database.
// Using parameters in command will avoid attempts of SQL injection.
OleDbConnection objOleDbConnection = new OleDbConnection();
// Creating command object.
objOleDbConnection.ConnectionString =
"Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + filePath + ";" +
"Persist Security Info=False;" +
"Jet OLEDB:Database Password=" + pass + ";";
OleDbCommand objOleDbCommand = new OleDbCommand();
objOleDbCommand.CommandText = SQL;
// Assigning a connection string to the command.
objOleDbCommand.Connection = objOleDbConnection;
try
{
// Open database connection.
objOleDbConnection.Open();
objOleDbCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
// Displaying any errors that
// might have occured.
MessageBox.Show("Error: " + ex.Message);
}
finally
{
// Close the database connection.
objOleDbConnection.Close();
}
// Refreshing state of main window.
mainWindow.DisplayFileContent(filePath);
MessageBox.Show("Data was successfully deleted.");
// Clearing text box field.
txtEntryID.Clear();
}
答案 0 :(得分:3)
在VBA代码中,您可以使用DCount()
函数。
您也可以使用SQL语句删除记录,并在事后通知用户;从用户的角度来看,没有区别:
Dim id As Long
id = GetAnIdFromTheUser()
With CurrentDb
Do
.Execute "DELETE FROM [TableName] WHERE ID = " & id
If .RecordsAffected > 0 Then
Goto Done
End If
MsgBox "That ID doesn't exist; please try another."
id = GetAnIdFromTheUser()
Loop
Done:
.Close
End With
编辑:
在ADO.NET中,您可以通过检查ExecuteNonQuery的返回值来遵循相同的方法。例如,您可以将函数声明为bool TryDeleteData(string SQL)
并执行类似
...
if (objOleDbCommand.ExecuteNonQuery() == 0)
return false;
...
答案 1 :(得分:3)
您可以使用VBA的DCount
功能:
DCount("*", "SomeTable", "ID = 1")
如果这是0
,那么您就知道该记录不存在并且可以通知用户。
答案 2 :(得分:3)
你的问题不够明确,所以我猜你想做的是执行DELETE查询然后返回记录是否被删除。如果这就是你想要做的,你可以这样做:
DECLARE @deletedID AS INT
SELECT @deletedID = id FROM your_table WHERE id = <the id supplied by user>
DELETE FROM your_table
WHERE your_table.id = <the id supplied by user>
RETURN @deletedID
如果请求的ID不存在,则返回NULL
修改强>
根据您的评论中的说明,以下查询应该可以正常运行:
SELECT COUNT(DataId) as Cnt
FROM PersonalData WHERE DataId = <user_specified_id>
此查询将生成单列单行结果集(即标量值)。该值将为1或0(假设只有一个条目可能具有相同的id)。如果计数为0,则该条目不存在。
<强> P.S。
您执行查询的方式是自己打开SQL注入攻击。基本上,有人可以给你以下DataID:0 OR 1 = 1
并猜测会发生什么 - 所有PersonalData记录都将被删除!
更好的方法是使用准备好的陈述。或者至少,在将用户输入连接到查询文本之前,请务必确保清理并验证用户输入。