سؤال

وأنا أدخل اسما في مربع النص على سبيل المثال. "جون" وحفظه في قاعدة البيانات وهو ما يحدث بالفعل، وبعد ذلك مرة أخرى أدخل "جون" الذي لا يحفظ. ولكن اذا كنت أدخل "جون"، فإنه يحفظ هذا مرة أخرى ... أنا في حاجة إليها ليتم حفظ جون والعكس بالعكس.

وطيب حتى هذا هو النص الذي هو الهدوء المعتاد:

 <asp:TextBox ID="TextBox2" runat="server" Width="80%" BorderColor="Black" 
                    MaxLength="127"></asp:TextBox>

وهنا هو رمز:

int k= 0
SqlConnection dataConnection = new SqlConnection();
            dataConnection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            SqlCommand dataCommand =
                    new SqlCommand("select Name from Groups", dataConnection);


            ArrayList names = new ArrayList();
            dataConnection.Open();
            SqlDataReader rdr = dataCommand.ExecuteReader();
            while (rdr.Read())
            {
                names.Add(rdr.GetString(0));
            }
            dataCommand.Dispose();
            dataConnection.Dispose();

            //to check if name already used..
            for (int i = 0; i < names.count; i++)
            {
                if (Name != (string)names[i])
                {
                    k = 1;

                }
                else
                {
                    Label1.Text = "Name is already present";
                    Label1.Visible = true;
                    k = 0;
                    break;
                }
            }
            if (k == 1)
            {
                Insertname();
            }
هل كانت مفيدة؟

المحلول

if (Name != (string)names[i])
{
    ...
}

ويمكن أن تصبح

if (!Name.Equals((string)names[i], StringComparison.InvariantCultureIgnoreCase))
{
    ...
}

نصائح أخرى

واحد طريقة للقيام بذلك هي لتغييره إلى حالة سليمة في كل مرة قبل عرضه على قاعدة البيانات.

لحملها على حالة سليمة، يمكنك أن تجرب طريقة ToTitleCase() في System.Globalization.TextInfo.

لاحظ أن ToTitleCase() يوفر السلوك غلاف التعسفي، وليس السلوك الصحيح لغويا. على سبيل المثال "الحرب والسلام" ينبغي أن يكون أقل القضية باللغة الإنجليزية. وهذه مشكلة خاصة لحالات مثل أوبراين، الذي ToTitleCase الناتج الإرادة كما اوبراين.

في النهاية، فإنه قد يكون من الأسهل لمجرد السماح قاعدة البيانات انقاذ الشيء.

وحان الوقت لدش بارد.

أولا، إذا كنت ترغب في التحقق في حالة وجود اسم وأدخله إذا كان لا يجب أن تحقق على الخادم، تحت العزل المناسبة ومراقبة المعاملات. ما لديك هناك، إضافة إلى كونه غير فعالة بشكل مرعب عن طريق التحقق من اسم مقابل مجموعة على العميل ، غير صحيح لأنه يتحقق إذا لم اسم لا <م> موجودة (الفعل الماضي) . أنها لا تعتبر التزامن ونتيجة لذلك طلبين يمكن محاولة لادخال نفس الاسم.

وثانيا، إذا كنت بحاجة إلى التفرد في قاعدة البيانات فإنك فرض عليها قيود الجدول. كنت ترغب في حالة اسم فريد حساس، ثم يجب عليك إضافة إلى الجدول الخاص بك على العمود اسم والتأكد من يستخدم عمود .

لماذا لا مجرد قوة لالكبيرة (حالة أو أقل لهذه المسألة) في منطق المقارنة:

وإذا (Name.ToUpper ()! = (سلسلة) أسماء [أنا] .ToUpper)

وHTH

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top