दिलचस्प पोस्ट
सी में बिटफ़ील्ड हेरफेर क्या गैर-स्थिर कॉल की तुलना में जावा स्थिर कॉल अधिक या कम महंगे हैं? सीएसएस – माता पिता की ऊंचाई तक बच्चे डीआईवी ऊंचाई को फ्लोट करें जीडीआई + में एक सामान्य त्रुटि हुई, मेमोरीस्ट्रीम को JPEG छवि सभी ब्राउज़रों पर हाइफ़न पर लाइन ब्रेक को कैसे रोकें अन्य सिस्टम डेटा की लोचदारशोध प्रतिकृति? अजगर का उपयोग कर स्ट्रिंग से एक चरित्र को कैसे हटाया जाए? पीपी के साथ SciPy स्थापित करना UITextView में मार्जिन / पैडिंग कैसे खोएंगे? कैसे प्रत्येक समूह के भीतर एक अंतर चर बनाने के लिए? छवियों को पुनर्निर्देशित करने के लिए .htaccess JSON.parse सभी प्रमुख ब्राउज़रों द्वारा समर्थित है? देखने के लिए कैसे एमएससी नियंत्रक से जेसन ऑब्जेक्ट को वापस करना है <Select> विकल्प के माध्यम से फिराना क्लास के भीतर एक टेम्पलेट फ़ंक्शन कैसे बनाएं? (C ++)

उपयोगकर्ता नाम या उपयोगकर्ता ईमेल की जांच पहले से मौजूद है

मैं एक साधारण पंजीकरण पृष्ठ पर काम कर रहा हूं जहां उपयोगकर्ता एक ही उपयोगकर्ता नाम या ईमेल दर्ज नहीं कर सकता, मैंने एक ऐसा कोड बनाया है जो उपयोगकर्ता को उपयोगकर्ता नाम दर्ज करने से रोकता है और यह काम करता है, लेकिन जब मैंने उपयोगकर्ता को उसी उपयोगकर्ता नाम से प्रवेश करने से रोकने की कोशिश की या ईमेल इसे काम नहीं किया

और मेरा प्रश्न यह है, "मैं एक और शर्त कैसे जोड़ सकता हूं जहां उपयोगकर्ता पहले से मौजूद ईमेल दर्ज नहीं कर सकता है?"

मैंने इसे इस कोड में करने की कोशिश की, लेकिन उसने काम नहीं किया:

protected void Button_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection( ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString ); SqlCommand cmd1 = new SqlCommand("select 1 from Table where Name =@UserName", con); SqlCommand cmd2 = new SqlCommand("select 1 from Table where Email=@UserEmail", con); con.Open(); cmd1.Parameters.AddWithValue("@UserName", Name_id.Text); cmd2.Parameters.AddWithValue("@UserEmail", Email_id.Text); using (var dr1 = cmd1.ExecuteReader()) { if (dr1.HasRows) { Label1.Text = "user name already exists"; } using (var dr2 = cmd2.ExecuteReader()) { if (dr2.HasRows) { Label1.Text = "email already exists"; } else { dr1.Close(); dr2.Close(); //add new users con.Close(); } } } } 

लेकिन मुझे यह त्रुटि मिलती है:

पहले से ही एक खुले डेटारडर जो इस कमान से जुड़ा हुआ है, जिसे पहले बंद होना चाहिए।

Solutions Collecting From Web of "उपयोगकर्ता नाम या उपयोगकर्ता ईमेल की जांच पहले से मौजूद है"

जैसे मैंने अपनी टिप्पणी में कहा था कि आपका डिज़ाइन बुरा है!

पहले आपको डेटा एक्सेस लेयर होना चाहिए यह बड़े समाधान में प्रोजेक्ट होना चाहिए, लेकिन आपके मामले में आप इसे नई निर्देशिका की तरह रख सकते हैं इस निर्देशिका में आप यहां SqlManager क्लास बनाते हैं कोड है:

 public class SqlManager { public static string ConnectionString { get { return ConfigurationManager.ConnectionStrings["DevConnString"].ConnectionString; } } public static SqlConnection GetSqlConnection(SqlCommand cmd) { if (cmd.Connection == null) { SqlConnection conn = new SqlConnection(ConnectionString); conn.Open(); cmd.Connection = conn; return conn; } return cmd.Connection; } public static int ExecuteNonQuery(SqlCommand cmd) { SqlConnection conn = GetSqlConnection(cmd); try { return cmd.ExecuteNonQuery(); } catch { throw; } finally { conn.Close(); } } public static object ExecuteScalar(SqlCommand cmd) { SqlConnection conn = GetSqlConnection(cmd); try { return cmd.ExecuteScalar(); } catch { throw; } finally { conn.Close(); } } public static DataSet GetDataSet(SqlCommand cmd) { return GetDataSet(cmd, "Table"); } public static DataSet GetDataSet(SqlCommand cmd, string defaultTable) { SqlConnection conn = GetSqlConnection(cmd); try { DataSet resultDst = new DataSet(); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { adapter.Fill(resultDst, defaultTable); } return resultDst; } catch { throw; } finally { conn.Close(); } } public static DataRow GetDataRow(SqlCommand cmd) { return GetDataRow(cmd, "Table"); } public static DataRow GetDataRow(SqlCommand cmd, string defaultTable) { SqlConnection conn = GetSqlConnection(cmd); try { DataSet resultDst = new DataSet(); using (SqlDataAdapter adapter = new SqlDataAdapter(cmd)) { adapter.Fill(resultDst, defaultTable); } if (resultDst.Tables.Count > 0 && resultDst.Tables[0].Rows.Count > 0) { return resultDst.Tables[0].Rows[0]; } else { return null; } } catch { throw; } finally { conn.Close(); } } } 

इसके बाद आपको व्यवसाय ऑब्जेक्ट लेयर होना चाहिए। बड़े समाधान में आपके मामले की निर्देशिका में प्रोजेक्ट है। यदि आप कर पेज में हैं, तो आप को बीओ (व्यापार ऑब्जेक्ट) में टैक्स सी एस क्लास जोड़ना चाहिए।

कक्षा के तरीकों का उदाहरण, आपके पहले बटन के लिए:

 public DataSet GetTaxesByUserName(string userName) { SqlCommand cmd = new SqlCommand(@" select 1 from Table where Name =@UserName"); cmd.Parameters.AddWithValue("@UserName", userName); return DA.SqlManager.GetDataSet(cmd); } 

आप डेटासेट में सभी आवश्यक डेटा ला सकते हैं उसके बाद आप करों जैसे चेक कर सकते हैं dst.Tables [0] .Rows.Count> 0 (या == 0)

सम्मिलित करने के लिए आप इस तरह से विधि हो सकते हैं:

  public virtual void Insert(params object[] colValues) { if (colValues == null || colValues.Length % 2 != 0) throw new ArgumentException("Invalid column values passed in. Expects pairs (ColumnName, ColumnValue)."); SqlCommand cmd = new SqlCommand("INSERT INTO " + TableName + " ( {0} ) VALUES ( {1} )"); string insertCols = string.Empty; string insertParams = string.Empty; for (int i = 0; i < colValues.Length; i += 2) { string separator = ", "; if (i == colValues.Length - 2) separator = ""; string param = "@P" + i; insertCols += colValues[i] + separator; insertParams += param + separator; cmd.Parameters.AddWithValue(param, colValues[i + 1]); } cmd.CommandText = string.Format(cmd.CommandText, insertCols, insertParams); DA.SqlManager.ExecuteNonQuery(cmd); } 

इसके लिए आपको वर्तमान बीओ क्लास में प्रॉपर्टी टेबलनाम होना चाहिए।

इस मामले में इस पद्धति का उपयोग हर जगह किया जा सकता है और आपको इन्हें बुलाए जाने के लिए केवल एक पंक्ति की आवश्यकता है और आपकी जैसी कोई समस्या नहीं होगी।

आपने पहले के अंदर एक और DataReader खोल दिया है और समस्या पैदा कर रही है I .. मैंने इसे फिर से व्यवस्थित किया है इसे जांचें ..

 SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); SqlCommand cmd1 = new SqlCommand("select 1 from Table where Name =@UserName", con), cmd2 = new SqlCommand("select 1 from Table where Email=@UserEmail", con); con.Open(); cmd1.Parameters.AddWithValue("@UserName", Name_id.Text); cmd2.Parameters.AddWithValue("@UserEmail", Email_id.Text); bool userExists = false, mailExists = false; using (var dr1 = cmd1.ExecuteReader()) if (userExists = dr1.HasRows) Label1.Text = "user name already exists"; using (var dr2 = cmd2.ExecuteReader()) if (mailExists = dr2.HasRows) Label1.Text = "email already exists"; if (!(userExists || mailExists)) { //add User } 

दूसरे को खोलने से पहले आपको एक दिनरेडर को बंद करना होगा। यद्यपि यह नहीं है कि मैं इसे कैसे करूं, लेकिन आप प्रत्येक के बाद डेटरियर को बंद करके रनटाइम त्रुटि से निपट सकते हैं IF :

 using (var dr1 = cmd1.ExecuteReader()) { if (dr1.HasRows) { string Text = "user name already exists"; } dr1.Close(); } using (var dr2 = cmd2.ExecuteReader()) { if (dr2.HasRows) { string ext = "email already exists"; } else { //add new users } dr2.Close(); } con.Close(); 

यह काम कर सकता है, हालांकि कुछ चीजें हैं जो मैं अलग तरीके से करूँगा …

 protected void Button_Click(object sender, EventArgs e) { bool inputIsValid = true; var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); var userNameCmd = new SqlCommand("SELECT 1 FROM Table WHERE Name = @UserName", con); var emailCmd = new SqlCommand("SELECT 1 FROM Table WHERE Email = @UserEmail", con); con.Open(); userNameCmd.Parameters.AddWithValue("@UserName", Name_id.Text); emailCmd.Parameters.AddWithValue("@UserEmail", Email_id.Text); using (var userNameReader = userNameCmd.ExecuteReader()) { if (userNameReader.HasRows) { inputIsValid = false; Label1.Text = "User name already exists"; } } using (var emailReader = emailCmd.ExecuteReader()) { if (emailReader.HasRows) { inputIsValid = false; Label1.Text = "Email address already exists"; } } if (inputIsValid) { // Insert code goes here } con.Close(); } 

आप ऐसा कुछ क्यों नहीं करते हैं:

 [Flags] public enum ValidationStatus { Valid = 0 , UserNameInUse = 1 , EmailInUse = 2 , } public ValidationStatus ValidateUser( string userName , string emailAddr ) { ValidationStatus status ; string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString ; using ( SqlConnection con = new SqlConnection( connectionString ) ) using ( SqlCommand cmd = con.CreateCommand() ) { cmd.CommandText + @" select status = coalesce( ( select 1 from dbo.myTable t where t.UserName = @UserName ) , 0 ) + coalesce( ( select 2 from dbo.myTable t where t.UserEmail = @UserEmail ) , 0 ) " ; cmd.Parameters.AddWithValue( "@UserName" , userName ) ; cmd.Parameters.AddWithValue( "@emailAddr" , emailAddr ) ; int value = (int) cmd.ExecuteScalar() ; status = (ValidationStatus) value ; } return status ; } 

कुछ और के अलावा, इस तरह से कुछ के लिए डीबी दो बार मारना मूर्खतापूर्ण है। और यह अधिक स्पष्ट रूप से आशय व्यक्त करता है।

तब आप इसे अपने बटन क्लिक हैंडलर में उपयोग कर सकते हैं, ऐसा कुछ:

 protected void Button_Click( object sender , EventArgs e ) { string userName = Name_id.Text ; string emailAddr = Email_id.Text ; ValidationStatus status = ValidateUser( userName , emailAddr ) ; switch ( status ) { case ValidationStatus.Valid : Label1.Text = "" ; break ; case ValidationStatus.EmailInUse : Label1.Text = "Email address in use" ; break ; case ValidationStatus.UserNameInUse : Label1.Text = "User name in use" ; break ; case ValidationStatus.EmailInUse|ValidationStatus.UserNameInUse: Label1.Text = "Both user name and email address in use." ; break ; default : throw new InvalidOperationException() ; } if ( status == ValidationStatus.Valid ) { CreateNewUser() ; } }