Member 14659146 Ответов: 2

Как преобразовать входную строку с помощью подстроки


здравствуйте и добрый день..
У меня есть текстовое поле, которое будет получать входные данные и хранить их в базе данных. Однако мне нужно преобразовать свои входные данные, чтобы получить реальный формат данных, который я хочу..

например, у меня есть входной сигнал 00000155P8333, и я хочу преобразовать его в ABCP8333.

это мой запрос, но он не работает, и я не получаю никаких сообщений об ошибках, и я помещаю его в cls.Insertdesk file .. "en" - это входное значение..

"Insert into deskmst(desk_no, lastdate)  values('" + en + "', sysdate) AND subst('" + en + "',9,5) = ABC" ;


это мой aspx-файл.файл CS

protected void InvisButton_Click(object sender, EventArgs e)
      {
          string desk = Scancuba.Text;
          resultscan.Text = "";


          if (desk == "" || desk.Length == 13)
          {
              resultscan.Text = "Please Scan again";
              resultscan.Style.Add("background-color", "#FF0000");

          }
         else
          {

              bool result = Cls.Insertdesk(desk);
              if (result == true)
              {
                  resultscan.Text = "Insert Success   " + desk;
                  resultscan.Style.Add("background-color", "#90ee90");
                  //ModalPopupExtenderEditMessage.Show();
              }
              else
              {

                  resultscan.Text = "Insert Fail   " + desk + "   already exists !  "  ;
                  resultscan.Style.Add("background-color", "#FF0000");
                  //ModalPopupExtenderEditMessage.Show();
              }
          }
         // Scancuba.Focus();
          DataView dv = GetData();
          Jadual.DataSource = dv;
          Jadual.DataBind();
      }


когда я запускаю код,любой вход будет отображать сообщение "Insert fail".. Кто-нибудь знает, что я здесь сделал не так? Я новичок так что прошу прощения если мои ошибки глупы

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

я попытался закодировать запрос в файле .cs, но он дал мне ошибку, так как мне нужно использовать 3 аргумента подстроки..

2 Ответов

Рейтинг:
7

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;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

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


Рейтинг:
12

RickZeeland

Для SQL Server см. пример здесь: Функция SQL Server SUBSTRING() [^]
Так что это будет:

SELECT 'ABC' + SUBSTRING('00000155P8333', 9, 5) AS ExtractString;