0

我正在使用 C# 在 asp.net 中构建一个 Web 应用程序。我有用户应该注册然后可以登录的表单。我在让网络应用程序知道用户选择的名称是“已经存在”或不存在时遇到问题。如果它已经存在,则不应插入相同的名称并显示一条消息“用户名已存在”。我试过了,SqlDataReader但没有运气。

protected void Register_Button_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BJ_Player_String"].ToString());
        SqlCommand cmd = new SqlCommand();
        SqlCommand cmd2 = new SqlCommand();
        SqlDataReader data_reader;
        String name = TextBox2.Text;
        String date = TextBox3.Text;


        try
        {
            conn.Open();
            cmd = new SqlCommand("Insert into BJ_Player (Player_Name, D_O_B) Values (@Player_name, @D_O_B)", conn);
            cmd = new SqlCommand("Select Player_Name from BJ_Player WHERE Player_Name = @Player_name", conn);
            cmd.Parameters.Add("@Player_name", SqlDbType.NVarChar).Value = name;
            cmd.Parameters.Add("@D_O_B", SqlDbType.Date).Value = date;
            cmd.Connection = conn;
            data_reader = cmd.ExecuteReader();
            cmd.ExecuteNonQuery();

            if (data_reader.HasRows)
            {
                lblPlayerNameExists.Visible = true;
            }
            else
            {
                // do nothing
            }    
        }
4

5 回答 5

2

使 Player_Name 在数据库中唯一,然后当您尝试插入时它会给您异常。您必须使用唯一约束。您还必须提供命令类型并检查您将两个查询分配给同一个 cmd 对象

于 2012-04-14T18:27:18.273 回答
1

在您的代码中,您在数据库中插入数据,然后您正在检查名称是否相同。首先,您应该在数据库中搜索名称,然后如果没有任何具有该名称的记录,您应该添加您的记录。

于 2012-04-14T18:54:57.330 回答
0

如果您想编写一个模型函数来做到这一点,那么

  1. 将其留给与第二种方法非常相似的ajax检查
  2. 例如,发出“从 DB 表中选择用户名”以检索用户名,然后检查用户名输入,然后再显示视图以报告问题(如果有)或显示消息以告诉用户“此名称有效”。
于 2012-04-14T18:50:19.823 回答
0

我通常通过以下两种方式之一进行:

  1. 创建将检查名称唯一性并在一切正常时插入新记录的存储过程。它应该将状态作为您将检查的数字代码返回。
  2. 在将其保存为验证过程的一部分之前,请检查名称的唯一性。
于 2012-04-14T18:53:30.583 回答
0

使用合并语句可能对此有所帮助。Merge 根据与源表连接的结果对目标表执行插入、更新或删除操作。

基本上它在需要时插入,并在需要时更新。通常被称为 upsert。但它完成了工作。

这是一个解释如何使用合并的站点的链接。看起来是一篇不错的文章。 http://www.kodyaz.com/articles/sql-server-2008-t-sql-merge-statement-example.aspx

于 2012-04-14T19:34:23.363 回答