Member 14072693 Ответов: 3

Как передать постоянную переменную sting в SQL-запрос в C# WPF


я не передаю данные и это должно быть в базе данных

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

я пробовал передавать запросы пожалуйста дайте решение

здесь мне нужно ввести в базу данных постоянное строковое значение paas, например string English="English.Text"
SqlCeConnection conn = new SqlCeConnection(DBConnection.GetConnString());

            SqlCeEngine engine = new SqlCeEngine(Common.CommonProperties.ConnString + Common.CommonProperties.Password);
            SqlCeCommand cmd;
            DataSet ds = new DataSet();
            if (textEMail.Text == "" || passwordBox1.Password == "")
            {
                System.Windows.MessageBox.Show(" Enter EmailID and Password .");
                return;
            }

            cmd = new SqlCeCommand("SELECT * FROM Login where EmailID='" + textEMail.Text + "' and Password='" + passwordBox1.Password + "'", conn);
            SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);

            da.Fill(ds);
            int i = ds.Tables[0].Rows.Count;
            if (i == 1)
            {
                conn.Open();
                String q1 = "insert into LoginTime(LoginDate,EmailID,Medium) values(getdate(),'" + textEMail.Text + "','" + Kannada.Text + "')";
                cmd.CommandType = CommandType.Text;

                cmd.CommandText = q1;
                cmd.ExecuteNonQuery();
                System.Windows.MessageBox.Show("You are Successfully Login ");

                Liststd_KM f2 = new Liststd_KM();
                f2.Show();
                this.Hide();
                //ds.Clear();

            }
            else
            {
                System.Windows.MessageBox.Show("Not Registered User or Invalid Name/Password");
                passwordBox1.Password = "";
            }

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. И есть так много разных вещей, которые вы могли бы попробовать! Поэтому отредактируйте свой вопрос, покажите нам фрагмент кода, который вы пытаетесь использовать, и объясните, что он сделал, чего вы не ожидали, или не сделал того, что вы сделали; и расскажите нам, как вы "знаете", что данные не попали в БД.

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

ZurdoDev

Это легко сделать. Где ты застрял?

RmcbainTheThird

Под постоянной строкой вы подразумеваете:
private const string PARENT = "родитель";

3 Ответов

Рейтинг:
2

OriginalGriff

Так мало кода, так много серьезных ошибок...
Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Никогда не храните пароли в открытом виде - это серьезная угроза безопасности. Здесь есть некоторая информация о том, как это сделать: Хранение паролей: как это сделать.[^]

SqlConnection, SQLCommand и так далее-все это дефицитные ресурсы: если вы их создадите, то ... вы должны избавиться от них. Самый простой способ сделать это-создать их в using блокируйте, и они будут автоматически утилизированы, когда выйдут за пределы видимости.


Рейтинг:
1

MadMyche

Как передать постоянную переменную sting в SQL-запрос в C# WPF
1. я не передаю данные, и это должно быть в базе данных
2. что я пробовал: я пробовал передавать запросы, пожалуйста, дайте решение

Ну, не так уж много контекста для работы; и нет кода, чтобы увидеть, где могут быть ваши проблемы.
Думаю, мы начнем с самого начала.

Как передать постоянную переменную sting в SQL-запрос в C# WPF
Правильный способ сделать это-использовать параметризованный запрос для команды, которую вы хотите выполнить.
1. Создайте текст команды в виде строки и используйте a параметр в качестве заполнителя для переменной
string SqlCmdText = "SELECT FNames FROM UserList WHERE EmailAddress = @Email";

Затем, после создания вашей команды SqlCommand, вы добавите этот параметр в объект command
cmd.Parameters.AddWithValue("@Email", UserEmailAddress);

Вот полный образец для вас

public static string GetFirstName(string UserEmailAddress) {

  string ReturnValue = "";
  string SqlConnString = "{ Connection String }";
  string SqlCmdText = "SELECT FNames FROM UserList WHERE EmailAddress = @Email";

  using (SqlConnection conn = new SqlConnection(SqlConnString)) {
    using (SqlCommand cmd = new SqlCommand(SqlCmdText, conn)) {
      cmd.CommandType = CommandType.Text;
      cmd.Parameters.AddWithValue("@Email", UserEmailAddress);

      conn.Open();

      var sqlReturn = cmd.ExecuteScalar();
      if (sqlReturn != null) { ReturnValue = sqlReturn.ToString(); }

      conn.Close();
    }
  }
  return ReturnValue;
}


Если у вас есть конкретный запрос или код для работы, я настоятельно рекомендую вам использовать Улучшить Вопрос виджет и добавьте этот код.

Добавление на основе предоставленного в настоящее время кода приложения
Спасибо, что предоставили свой код.
У нас есть несколько вопросов здесь:

1. уязвимость SQL-инъекции Никогда не объединяйте строки и входные значения вместе, чтобы создать инструкцию SQL. Вы становитесь восприимчивы ко всему, что конечный пользователь вводит в текстовое поле. Этого можно избежать, используя параметры в контексте команды.
Я прокомментировал первый пример проблемы и заменил его тем, как это должно быть. Вам нужно будет сделать то же самое, что и две другие команды SQL, которые вы используете
//cmd = new SqlCeCommand("SELECT * FROM Login where EmailID='" + textEMail.Text + "' and Password='" + passwordBox1.Password + "'", conn);
cmd = new SqlCeCommand("SELECT * FROM Login WHERE EmailID= @Email AND Password= @Password", conn);
cmd.Parameters.AddWithValue("@Email", textEMail.Text);
cmd.Parameters.AddWithValue("@Password", passwordBox1.Password);
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);

2. Простые Текстовые Пароли
Вы никогда не должны хранить пароли в виде обычного текста. Вы должны реализовать какой-то метод хэширование их защищать. Однако это потребует гораздо большего, чем быстрый ответ. Я бы рекомендовал прочитать статьи здесь и в других местах по этой теме. Я работал с реализациями bCrypt и тоже счел бы это приемлемым.
Хранение паролей: как это сделать.[^]
Используйте BCrypt для хэширования ваших паролей: пример для C# и SQL Server « блог разработки программного обеспечения Роба крафта[^]

В совокупности они просят, чтобы все учетные данные были украдены
Все, что мне нужно будет сделать, чтобы получить все ваши логины и пароли, - это использовать этот адрес электронной почты:
Fred' OR (1=1);--.
Это приведет к короткому замыканию вашего заявления на "SELECT * FROM Login", и теперь у меня есть простые текстовые пароли для загрузки.


Maciej Los

5ed!

Рейтинг:
1

Patrice T

cmd = new SqlCeCommand("SELECT * FROM Login where EmailID='" + textEMail.Text + "' and Password='" + passwordBox1.Password + "'", conn);
String q1 = "insert into LoginTime(LoginDate,EmailID,Medium) values(getdate(),'" + textEMail.Text + "','" + Kannada.Text + "')";

Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]