2016-10-26 3 views
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

Сделайте столбец Unique и после окружения вашего кода с помощью 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 
) 
Смежные вопросы