C# SQL Server数据库查询
我使用了ASP.net设置的标准用户表,希望能够删除用户。首先,我需要从名为memberships的表中删除用户id,然后删除该用户。为此,我设置了两个文本框,一个用于用户id,另一个用于用户名 有没有关于T-SQL语句的想法,该语句将首先删除成员身份用户id,然后移到删除用户名上?这是我目前为止的语句C# SQL Server数据库查询,c#,asp.net,sql-server,windows,C#,Asp.net,Sql Server,Windows,我使用了ASP.net设置的标准用户表,希望能够删除用户。首先,我需要从名为memberships的表中删除用户id,然后删除该用户。为此,我设置了两个文本框,一个用于用户id,另一个用于用户名 有没有关于T-SQL语句的想法,该语句将首先删除成员身份用户id,然后移到删除用户名上?这是我目前为止的语句 else { try { connection.Open(); cmd = new SqlCommand("DELETE from Membershio
else
{
try
{
connection.Open();
cmd = new SqlCommand("DELETE from Membershio
WHERE UserId ='" + deleteuserIDbox.Text + "'", connection);
cmd = new SqlCommand("DELETE from Users WHERE UserName ='" + deleteuserbox.Text + "'", connection);
cmd.ExecuteNonQuery();
update.Text = "Your data has been removed";
}
catch
{
update.Text = "Your data has not been deleted";
}
}
这两个表是相关的,因此我需要先删除用户id,然后删除用户名
要使用当前代码,您需要执行第一个查询,然后为第二个查询设置CommandText并执行该查询
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = "DELETE FROM Membership WHERE UserID = @UserID";
cmd.Parameters.AddWithValue("@UserID", deleteuserIDbox.Text);
connection.Open();
cmd.ExecuteNonQuery();
cmd.Paramters.Clear();
cmd.CommandText = "DELETE from Users WHERE UserName = @UserName";
cmd.Parameters.AddWithValue("@UserName", deleteuserbox.Text);
cmd.ExecuteNonQuery();
}
另一种选择是使用一个存储过程,它允许您同时运行这两个查询
另一种选择是进行级联删除。下面是关于如何实现这一点的说明
最后,你要向别人敞开心扉。您不应该从用户获取输入并将该数据连接到SQL语句中。您应该使用存储过程或参数化查询(如上文所述)。要使用当前代码,您需要执行第一个查询,然后为第二个查询设置CommandText并执行该查询
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = "DELETE FROM Membership WHERE UserID = @UserID";
cmd.Parameters.AddWithValue("@UserID", deleteuserIDbox.Text);
connection.Open();
cmd.ExecuteNonQuery();
cmd.Paramters.Clear();
cmd.CommandText = "DELETE from Users WHERE UserName = @UserName";
cmd.Parameters.AddWithValue("@UserName", deleteuserbox.Text);
cmd.ExecuteNonQuery();
}
另一种选择是使用一个存储过程,它允许您同时运行这两个查询
另一种选择是进行级联删除。下面是关于如何实现这一点的说明
最后,你要向别人敞开心扉。您不应该从用户获取输入并将该数据连接到SQL语句中。您应该使用存储过程或参数化查询(如我上面使用的)。如果理解正确,您的输入方法存在严重问题 比如说,
UserID UserName
1 testUser
2 testUser2
应用程序中的逻辑;我可以在deleteuserIDbox中输入“1”,在deleteuserbox中输入“testUser2”,这将依次删除用户ID 1,但不用户名“testUser”
如果您还没有这样做,那么需要使用UserID上的外键将这两个表关联起来。因此,链接将通过UserID字段持久化
另一个问题是,您使用来自用户的输入直接执行查询,从而支持sql注入的可能性
关于查询,可以将“cmd.ExecuteNonQuery();”放在两个cmd语句之间 如果理解正确,您的输入法就会出现严重问题 比如说,
UserID UserName
1 testUser
2 testUser2
应用程序中的逻辑;我可以在deleteuserIDbox中输入“1”,在deleteuserbox中输入“testUser2”,这将依次删除用户ID 1,但不用户名“testUser”
如果您还没有这样做,那么需要使用UserID上的外键将这两个表关联起来。因此,链接将通过UserID字段持久化
另一个问题是,您使用来自用户的输入直接执行查询,从而支持sql注入的可能性
关于查询,可以将“cmd.ExecuteNonQuery();”放在两个cmd语句之间 您没有执行第一个命令:
connection.Open();
cmd = new SqlCommand("DELETE from Membershio
WHERE UserId ='" +
deleteuserIDbox.Text + "'", connection);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("DELETE from Users WHERE
UserName ='" + deleteuserbox.Text +
"'", connection);
cmd.ExecuteNonQuery();
此外,这些命令应该在事务中执行 您没有执行第一个命令:
connection.Open();
cmd = new SqlCommand("DELETE from Membershio
WHERE UserId ='" +
deleteuserIDbox.Text + "'", connection);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("DELETE from Users WHERE
UserName ='" + deleteuserbox.Text +
"'", connection);
cmd.ExecuteNonQuery();
此外,这些命令应该在事务中执行 有点晚了,但我今天才注意到你的问题 通过在数据库上执行此操作,您绕过了所有好东西!您应该在C#中通过调用Membership::DeleteUser方法来实现这一点
你根本不应该弄乱会员制的内部结构。有点晚了,但我今天才注意到你的问题 通过在数据库上执行此操作,您绕过了所有好东西!您应该在C#中通过调用Membership::DeleteUser方法来实现这一点
您根本不应该弄乱成员资格系统的内部结构。我注意到的第一件事是您在sql语句中使用了字符串连接。您需要使用绑定变量:有几个原因。接下来,接受一些答案,你这个懒汉!必须。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以精确地格式化和语法突出显示它!我注意到的第一件事是在sql语句中使用字符串连接。您需要使用绑定变量:有几个原因。接下来,接受一些答案,你这个懒汉!必须。如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮({}
),以精确地格式化和语法突出显示它!