2016-03-27 20 views
0

Bir tablo kaydım var. Tablodaki verilerden, kopya bulmak için tablodaki üç veriyi kontrol etmek ve ayrıca her bir karşılaştırma için ayrı açılan mesajlar üretmek istiyorum. Eğer kullanıcı adı zaten kullanılıyorsa, kullanıcı adını görmek istiyorum. Aynı şekilde AdminNo ve RegitrationNo için. Arka uç kodudur:Tek bir SQL denetiminden farklı sonuç nasıl üretilir?

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
      conn.Open(); 
      String str = "INSERT INTO Register (Name,AdminNo,RegisterNo,Branch,DoB,Address,Mobile,Email,Username,Password) VALUES('" + TextBoxName.Text + "','" + Convert.ToInt64(TextBoxadmin.Text) + "','" + TextBOxreg.Text + "','" + DrpBranch.SelectedItem + "','" + Convert.ToDateTime(DoB.Text) + "','" + address.Text + "','" + mobno.Text + "','" + email.Text + "','" + user.Text + "','" + pass.Text + "')"; 
      SqlCommand cmd = new SqlCommand(str, conn); 
      cmd.ExecuteNonQuery(); 

Bu tabloya uç fonksiyonudur.

private bool UserExist() 
{ 
    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 

    SqlCommand cmd = new SqlCommand("Select * From Register Where AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"' OR Username='"+user.Text+"' OR RegisterNo='"+TextBOxreg.Text+"'"); 
    cmd.CommandType = CommandType.Text; 
    cmd.Connection = conn; 
    conn.Open(); 
    SqlDataReader rdr; 
    rdr = cmd.ExecuteReader(); 
    if (rdr.HasRows) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
    conn.Close(); 
} 

Bu ben VEYA operatörü ile yinelenen kontrol görebilirsiniz fonksiyonunu kontrol benim kopyası. Herhangi bir çoğaltma bulunursa, doğru döndürülür. Lütfen kopyaları ayrı olarak bulmak ve ayrı mesajlar görüntülemek için bir yol sağlayın.

+0

Gitmelisiniz kesinlikle parametreli sorgular öğrenmek. Kodunuz SQL Injection saldırılarına açıktır. –

+0

burada basit ve temiz görünüyor http://www.aspsnippets.com/Articles/Simple-User-Registration-Form-Example-in-ASPNet.aspx – banksy

cevap

0

C++ veya MS SQL konusunda uzman değilim, ancak bu çözümün işe yarayacağını düşünüyorum. Sözdizimi tam olarak doğru değilse özür dilerim (bunu doğrulamak için kolay bir yolum yok), bu yüzden lütfen gerektiğinde uyarlanmaya çekinmeyin, ancak fikir aşağıdaki gibidir. aşağıdaki gibi SQL deyimi değiştirmek olacaktır:

select 
case 
    when 
     AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"'" 
    then 
     CAST(1 AS BIT) 
    else 
     CAST(0 AS BIT) 
end as AdminYes, 

case 
    when 
     Username='"+user.Text+"'" 
    then 
     CAST(1 AS BIT) 
    else 
     CAST(0 AS BIT) 
end as UsernameYes, 

case 
    when 
     RegisterNo='"+TextBOxreg.Text+"'" 
    then 
     CAST(1 AS BIT) 
    else 
     CAST(0 AS BIT) 
end as RegisterNoYes 
From Register Where AdminNo='"+Convert.ToInt32(TextBoxadmin.Text)+"' OR Username='"+user.Text+"' OR RegisterNo='"+TextBOxreg.Text+"'" 

Eğer bu sorguyu yürütmek olacaktır: shatement

SqlCommand cmd = new SqlCommand(sqlStatement); 

SQLStatement Yukarıdaki haberi bölümdür. Daha sonra okuyucunuzla çalışırken, rdr.getBoolean (0) değerini true olarak döndürürse kontrol edebilirsiniz, o zaman admin duplicate demektir, rdr.getBoolean (1) 'i true olarak alırsanız, o zaman bir kullanıcı adı kopyası olur. ve rdr.getBoolean (3) 'a eşit olarak eşitse, o zaman bir RegiserNo kopyasıdır.

+0

Cevabınız için teşekkür ederim, ancak AdminYes'in anlamını anlamadım , UsernameYes, RegisterNoYes. Değeri görüntülemek için değeri bir .NET sınıfına iletmeyi seviyorum. Bu SQL sorgusunu ona iletmenin mümkün olmadığını düşünüyorum. Örneğin, kullanıcı adı çoğaltıldığında int str değerini 1 olarak ayarlamak istiyorum. – FaheemMCFC

+0

Yukarıdaki düzenlemelerime bakın. AdminYes, UsernameYes, RegisterNoYes isimleri gerçekten önemli değil. Önemli olan, kodunuzda bu boole değerlerini kontrol edebilmenizdir. – artybug

+0

Bunu kontrol edeceğim. Sql ile çalışmak için çok iyi değilim ..Teşekkürler @Artur Charukhchyan – FaheemMCFC

0

Saklı yordam oluşturmalı ve @AdminNo, @UserName ve @RegisterNo öğelerinizi parametre olarak geçirmelisiniz. saklı yordam ya bir dönebilirsiniz - özel kullanıcı tanımlı türü,
- xml içeriği ile varchar (max) veya
- sadece bir sıradan masa sonucu set fiili biçimi not matter sürece yok "olabildiğince "bir tablo (bir sayıl yanıt)

sproc sizin UserExist rutininde, Sonra

Select 'AdminNo' as [FieldName], count(*) as [CountOfRecords] From Register Where AdminNo = @AdminNo 
UNION ALL 
Select 'UserName', count(*) From Register Where UserName = @UserName 
UNION ALL 
Select 'RegisterNo', count(*) From Register Where RegisterNo = @RegisterNo 

çizgisinde bir şeyler yapabileceğini geçiren, sen ExecuteReader zorunda ve tüm satırları okuyun. Her zaman üç satır (AdminNo için bir tane, KullanıcıAdı için bir tane ve RegisterNo için bir tane) sahip olacak ve satırların her birine sayımını kullanabilirsiniz - sayısı> 0 sonra çoğaltmaları olup olmadığını

0
using System; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 

namespace DemoNameSpace 
{ 
    public class DemoClassDAL 
    { 
     private CheckResult UserExist() 
     { 
      CheckResult result = CheckResult.NoDuplicate; 

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString)) 
      { 
       SqlCommand cmd = new SqlCommand(@"select top 1 
                case 
                 when AdminNo = @AdminNo then 'AdminExists' 
                 when Username = @UserName then 'UserExists' 
                 when RegisterNo = @RegisterNo then 'RegisterNoExists' 
                end as Result 
                From Register"); 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = conn; 
       conn.Open(); 

       var dbresult = cmd.ExecuteScalar(); 
       conn.Close(); 

       if (dbresult != DBNull.Value) 
       { 
        Enum.TryParse(dbresult.ToString(), out result); 
       } 
      } 

      return result; 
     } 
    } 

    public enum CheckResult 
    { 
     NoDuplicate, 
     AdminExists, 
     UserExists, 
     RegisterNoExists 
    } 
} 
İlgili konular