JKwaaan Ответов: 2

Как вставить текстовые поля и столбцы базы данных в один и тот же запрос?


void add()
       {
           var docnum = SR_Yr.Text + '-' + SR_No.Text;
           string constring = "Data Source=D-HOS-MIS2;Initial Catalog=Consignment_db;Persist Security Info=True;User ID=sa;Password=t.july.01";
           string query = "insert into StockRequesitionTable (SR_DocNo,SR_ItemID) values('"+docnum+"',SRT_ID)";
           SqlConnection con_db = new SqlConnection(constring);
           SqlCommand cmd = new SqlCommand(query, con_db);
           SqlDataReader reader;

           try
           {
               con_db.Open();
               reader = cmd.ExecuteReader();
               while (reader.Read())
               {

               }
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }


Есть ли какой-либо способ построить его с помощью текстовых полей,datetime и или comboboxes вместе с таблицами базы данных?

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

Я попытался запустить код, указанный выше. Он вызвал запрос на неизвестный стол в ценности Я понял, что мне не хватает, возможно, запроса на соединение, но я не знаю, как его построить.

CHill60

Ваш вопрос совсем не ясен. Почему вы думаете, что вам нужно присоединиться? Никогда не используйте сцепленные строки для создания инструкций sql - см. Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Следуйте теориям по этой ссылке, и это может ответить на ваш вопрос

FranzBe

1) "вставить в" - это не запрос, поэтому вы должны использовать cmd.ExecuteNonQuery() вместо функции .Метода executereader(). Вы ничего не читаете из базы данных.

2) вы никогда не должны использовать пользователя базы данных "sa" для вашего приложения. Создайте пользователя с необходимыми разрешениями, необходимыми для вашего приложения, а затем используйте этого пользователя.

Richard Deeming

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

Вам также нужно будет предоставить значение для SR_ItemID колонка.

const string query = "insert into StockRequesitionTable (SR_DocNo, SR_ItemID) values(@docnum, @SRT_ID)";

using (SqlConnection con_db = new SqlConnection(constring))
using (SqlCommand cmd = new SqlCommand(query, con_db))
{
    cmd.Parameters.AddWithValue("@docnum", docnum);
    cmd.Parameters.AddWithValue("@SRT_ID", SRT_ID);
    
    con_db.Open();
    cmd.ExecuteNonQuery();
}

2 Ответов

Рейтинг:
1

Member 11621026

Вы можете передать параметр в этом вашем запросе.


CHill60

Я заметил, что у вас был еще один понижающий голос. Чтобы избежать этого, вот несколько советов при размещении решений:
1. Не публикуйте несколько решений одного и того же вопроса - рядом с вашим решением есть зеленая ссылка "улучшить решение", которая позволит вам добавить дополнительную информацию.
2. Не ставьте вопросы, комментарии, просьбы о разъяснении в качестве решения - используйте "есть вопрос или комментарий?" ссылка рядом с вопросом или используйте ссылку "ответить", если ОП опубликовал комментарий.
3. не просто сбрасывайте код в решение - включите несколько слов - например, для решения 1 здесь вы могли бы указать на разницу между вашим кодом и OP (вы до сих пор этого не сделали)
4. Убедитесь, что вы не повторяете то, что уже сказал кто-то другой, или если вы все-таки обернете материал в одно решение, то отдайте должное человеку, который сделал первоначальный комментарий.

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

Рейтинг:
0

Member 11621026

void add()
       {
           var docnum = SR_Yr.Text + '-' + SR_No.Text;
           string constring = "Data Source=D-HOS-MIS2;Initial Catalog=Consignment_db;Persist Security Info=True;User ID=sa;Password=t.july.01";
           string query = "insert into StockRequesitionTable (SR_DocNo,SR_ItemID) values('"+docnum+"',SRT_ID)";
           SqlConnection con_db = new SqlConnection(constring);
           SqlCommand cmd = new SqlCommand(query, con_db);
           

           try
           {
               con_db.Open();
               cmd.ExecuteNonQuery();
               
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message);
           }
       }


CHill60

Причины понижения рейтинга
- вы не объяснили, чем ваш код отличается от кода ОП
- единственное отличие-это исправление, предложенное Францбе в комментарии месяц назад, так что вы, по сути, "репостируете"
- ваше решение уязвимо для атак SQL - инъекций-смотрите мой комментарий от месяца назад тоже.