关于将用户/成员插入数据库表的问题!

时间:2011-05-29 05:50:00

标签: asp.net sql ado.net

我的注册表单有一个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完成验证用户!!!

1 个答案:

答案 0 :(得分:2)

我主要会改变两件事:

  1. 不要将SQL语句连接在一起 - 这为SQL注入攻击打开了大门。使用参数化查询 - 它们更安全,并且性能更好(因为只需要创建和缓存查询执行计划的单个副本,并且将一遍又一遍地重复使用)

  2. SqlConnectionSqlCommand个对象放入using块中,以便在使用块结束时自动释放/处置它们(您可以自己保存{ {1}} finally构造的块也是!)。

  3. 所以我的代码看起来像这样

    try...catch