检查用户数据是否已在数据库中

时间:2016-10-26 02:15:13

标签: c# asp.net

我希望在当前代码中包含功能,以防止将重复添加添加到数据库中。这样,如果有人已经注册了他们的姓名和电子邮件,则会弹出一条消息,说他们已经将他们的信息添加到数据库中。我的表单是使用asp.net,使用c#填充数据。我可以包含这样的内容:cmd.CommandText = "select * from Table1 where pName='"+t1.Text+"' and pEmail='"+t2.Text+"'";来实现这一目标吗?

c#代码:

using System.Data.OleDb;
using System.Configuration;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString2"].ToString();
        con.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.CommandText = "insert into[Table1](pName)values(@nm)";
        cmd.Parameters.AddWithValue("@nm", TextBox1.Text);
        cmd.CommandText = "insert into[Table1](pEmail)values(@nm)";
        cmd.Parameters.AddWithValue("@nm", TextBox2.Text);
        cmd.Connection = con;
        int a = cmd.ExecuteNonQuery();
        if (a>0)
        {
            Label1.Text = "Inserted Sucessfully!";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我建议您在INSERT语句之前先进行SELECT查询。此外,您只能在SELECT语句中使用电子邮件作为参数,而不包括名称,因为人们可能具有相同的名称。

string query = "SELECT COUNT(ID) FROM tblUsers WHERE email = @email
int count = db.ExecuteReader(query);    


if (count > 0){
   return "email is already in use";
} else {
   //Call the insert statement here with try catch inside. In this way you can handle if error occur on the execution itself.
}

答案 1 :(得分:0)

您可以使用此但我使用的是SQL Server 2014 ..试试这个.. 模式

CREATE TABLE [dbo].[Dummy](
    [id] [bigint] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](50) NULL,
)

和查询

  if not exists(select 1 from Dummy where Name='akash')
  insert into Dummy(Name) values('aka')

这是int a = cmd.ExecuteNonQuery();

中返回no的单个查询

方法2: 创建一个唯一的CONSTRAINT并使用try catch发现没有插入重复的行..

ALTER TABLE [dbo].[Dummy] ADD  CONSTRAINT [uc_Name] UNIQUE 
NONCLUSTERED 
(
    Name ASC
)