c#
  • asp.net
  • 2016-10-26 135 views 0 likes 
    0

    我想在当前代码中包含功能以防止将重复添加添加到数据库中。这样,如果某人已经注册了他们的姓名和电子邮件,则会弹出消息说他们已经将他们的信息添加到了数据库中。我的表单使用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!"; 
         } 
        } 
    } 
    
    +0

    简而言之,是的,你可以用'count(*)'来返回记录数。但更好的是使用'Parameters'而不是字符串concat – Prisoner

    +1

    使try-catch代码围绕你的代码。如果插入重复数据,它将通过sql异常捕获异常并显示消息 –

    +0

    谢谢!我会试一下! – penmas

    回答

    0

    我建议你有一个SELECT查询第一INSERT语句之前。您也只能在您的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. 
    } 
    
    +0

    在这种情况下,如何解决查询不是int的问题? – penmas

    +0

    我的错误,如果我用var而不是int来声明查询。 select count应该返回int(记录数)。 – bogzy

    +0

    更新了上面的代码。这个想法在那里,你可能需要添加一些修改艰难。 – bogzy

    0

    你可以使用这个,但我使用SQL Server 2014 ..Try这个.. 架构

    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();

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

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