Member 14754349 Ответов: 1

Как использовать множественную проверку на стороне клиента как для электронной почты, так и для пароля в ASP.NET с# ?


How to use multiple client side validation for both email and password in asp.net c# ?


Что я уже пробовал:

я попробовал это сделать но

private Boolean checkemail()
       {
           SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
           Boolean emailavailable = false;
           String myquery = "Select * from [test].[dbo].[MYFORM] where email='" + TXTEmail.Text + "'";


           SqlCommand cmd = new SqlCommand();
           cmd.CommandText = myquery;
           cmd.Connection = conn;
           SqlDataAdapter da = new SqlDataAdapter();
           da.SelectCommand = cmd;
           DataSet ds = new DataSet();
           da.Fill(ds);
           if (ds.Tables[0].Rows.Count > 0)
           {
               emailavailable = true;
           }
           conn.Close();
           return emailavailable;
       }

       private Boolean checkMobile()
       {
           SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
           Boolean mobile = false;
           String myquery = "Select * from [test].[dbo].[MYFORM] where contact='" + TXTContact.Text + "'";

           SqlCommand cmd = new SqlCommand();
           cmd.CommandText = myquery;
           cmd.Connection = conn;
           SqlDataAdapter da = new SqlDataAdapter();
           da.SelectCommand = cmd;
           DataSet ds = new DataSet();
           da.Fill(ds);
           if (ds.Tables[0].Rows.Count > 0)
           {
               mobile = true;
           }
           conn.Close();
           return mobile;
       }

1 Ответов

Рейтинг:
7

phil.o

Первый, никогда создайте SQL-скрипт, объединив строки. Воспользуйся параметризованный запрос вместо.
Как исправить SQL-инъекцию с помощью Microsoft .Чистые Параметризованные Запросы[^]
Создание параметризованных запросов в ADO.NET -- журнал Visual Studio[^]

Во-вторых, зачем делать а SELECT * когда вы могли бы просто сделать SELECT COUNT(id)? Зачем выбирать все столбцы, если вам нужно только одно значение?

В-третьих, вам не нужно заполнять datatable только ради подсчета его элементов. Если вы следуете второму совету, все, что вам нужно сделать, это позвонить ExecuteScalar по вашей команде объект. Кроме того, ваша фактическая логика неверна; если количество больше нуля, электронная почта недоступна. Может быть, вы намеревались проверить, существует ли электронная почта вместо этого?

Пример с первым методом:

private bool CheckEmail()
{
   int count = 0;
   using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
   {
      conn.Open();
      String myquery = "SELECT COUNT([id]) from [test].[dbo].[MYFORM] WHERE [email]=@email";

      using (SqlCommand cmd = new SqlCommand(myquery, conn))
      {
         cmd.Parameters.Add("@email", SqlDbType.VarChar).Value = TXTEmail.Text;
         try
         {
            count = cmd.ExecuteScalar();
         }
         catch (Exception ex)
         {
            // Log ex.Message + ex.StackTrace
         }
      }
   }
   bool emailExists = count > 0;
   bool emailAvailable = count == 0;
   return emailExists; // or emailAvailable
}