我的注册表单有一个CreateUserWizard。我使用了在创建用户后触发的事件。
然后我获取用户身份和密钥。在最后一行中,我将唯一键发送到类中的一个函数,该类应该将键插入Users表(该字段是主键并且是唯一的)。
public partial class Registration : System.Web.UI.Page
{
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
int i =(int) CurrentUser.ProviderUserKey;
RegisterAdo.InsertUsers(i);
}
}
下面,我使用我传递的值执行查询并将用户插入数据库
class RegisterAdo
{
public static void InsertUsers(int UsersIDentity)
{
string myConnectionString = WebConfigurationManager.ConnectionStrings["YourGuruDB"].ConnectionString;
SqlConnection sqlConnect = new SqlConnection(myConnectionString);
SqlCommand sqlCommand = new SqlCommand(RegisterAdo.insertCommand(UsersIDentity), sqlConnect);
try
{
sqlConnect.Open();
sqlCommand.ExecuteNonQuery();
}
catch (Exception x)
{
}
finally
{
sqlConnect.Close();
}
}
public static String insertCommand(int UsersIdentityToinsert)
{
string insertCommand="INSERT INTO Users(";
insertCommand += "UserID)";
insertCommand += "VALUES('";
insertCommand += UsersIdentityToinsert+"')";
return insertCommand;
}
我的问题是,这是否是将UserID
插入表格的最佳方式,以及我是否正确执行。我需要UserID
是唯一的,并且整个命令执行时没有失败...(在创建用户之后,整个UserCreateUser
完成验证用户!!!
答案 0 :(得分:2)
我主要会改变两件事:
不要将SQL语句连接在一起 - 这为SQL注入攻击打开了大门。使用参数化查询 - 它们更安全,并且性能更好(因为只需要创建和缓存查询执行计划的单个副本,并且将一遍又一遍地重复使用)
将SqlConnection
和SqlCommand
个对象放入using
块中,以便在使用块结束时自动释放/处置它们(您可以自己保存{ {1}} finally
构造的块也是!)。
所以我的代码看起来像这样
try...catch