nic*_*wdy 13 c# sql asp.net sql-server-2008
从sql server中删除一行时,我在Asp.net的C#代码中有一个小问题.我正在使用ExecuteNonQuery来确定我向页面呈现的消息.如果ExecuteNonQuery返回1,则显示成功消息.我陷入困境的地方是我有相同的逻辑来添加记录和更新记录,我的代码工作正常.请参阅下面的代码.
private void Delete_row(string ImageId)
{
string sSQL = "delete FROM dbo.Image_library_UK_temp where Image_id=" + ImageId;
using (SqlConnection dbConnection = new SqlConnection(app_settings.sql_conn_string_db))
{
try
{
//delete the row from db
dbConnection.Open();
SqlCommand command = new SqlCommand(sSQL, dbConnection);
command.CommandType = CommandType.Text;
command.CommandTimeout = 1024;
command.ExecuteNonQuery();
int rowsAffected = command.ExecuteNonQuery();
if (rowsAffected == 1)
{
messagepanel1.ShowSuccessMessage("The image " + txtImgTitle.Text + "has been deleted from the system.");
DisableValidation();
}
}
catch (Exception ex)
{
messagepanel1.ShowErrorMessage("Error: Deletion unsuccessful");
}
Session.RemoveAll();
generateTable(false);
}
}
Run Code Online (Sandbox Code Playgroud)
受影响的行当前返回0.这是一个简单的SQL语句,因此我的sql在C#中进行了硬编码,而我没有使用存储过程.
我有什么想法可以使这项工作?
pen*_*tur 37
你正在执行两次命令.
command.ExecuteNonQuery();
int rowsAffected = command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
第一行将删除该行并返回1,但您忽略了返回值.第二行将DELETE再次执行该语句,但它不会删除任何内容,因为没有更多行满足给定条件; 因此,rowsAffected将为零.
此外,您的代码很容易受到SQL注入攻击,正如评论中已经提到的那样.请考虑使用预准备语句.