Deekshaa Singh Chauhan Ответов: 3

Если номер счета существует, то показать сообщение уже существует


Как я могу проверить, если Билла нет. уже сохраненный в базе данных, то в окне сообщения show bill no. уже существует, где идентификатор компании, у меня есть 1 billno. textbox для ввода bill no. если я не войду ни в какое нет. это автоматически увеличивает 1 на 1. Если я введу любое другое нет, как: 11, что магазин и начать увеличивать 11, один за другим.

вот я и пытаюсь.Он работает успешно, но это не проверка нет. число существует или нет


<pre>  private int billno(string p)
        {
            Int32 Billno = 0;
            //s = Billno;
            cmd = new SqlCommand(p, con);
            int k;
            con.Open();

            if (txtbill.Text != "")
            {

                //check();

                 //cmd = new SqlCommand("IF NOT EXISTS (SELECT Billno FROM MainBillForm WHERE Company_ID = Company_ID)Select ISNULL(Max(Billno+1),1) From MainBillForm where Company_ID=" + GlobalVariable.companyId, con);
                 Billno = Convert.ToInt32(txtbill.Text);
                 k = Billno;

                 s = k;

                 k = (Int32)cmd.ExecuteScalar();
                 con.Close();
                 return Billno;
              
            }
            else
            {
                //s = k + 1;
                Billno = s;

                Billno = (Int32)cmd.ExecuteScalar();
                con.Close();
                return Billno;
            }




полудиск = полудиск + преобразование.ToDouble (g1. Cells[8].FormattedValue.Метод toString());
overallttl = overallttl + конвертировать.ToDouble (g1. Cells[9].FormattedValue.Метод toString());

// overallttl_wtax = overallttl_wtax + конвертировать.Метод todouble(Г1.Клетки[16].FormattedValue.Метод toString());
}
}
catch (исключение)
{
Ящик для сообщений.Шоу("уже доб");
}
двойная скидка = 0;
если (discounttxt.Текст != усилитель"" &;&амп; chk_DiscPerct.Проверено = = верно)
{
скидка = (_subTotal * Convert.ToDouble(discounttxt. Text)) / 100;
}
еще если (discounttxt.Текст! = "")
{
скидка = конвертация.ToDouble(discounttxt. Text);
}
SqlCommand cmd1 = new SqlCommand ("insert into MainBillForm (Billno,Name,Date,Shipped_Details,Order_Number,Sno,Product_Name,Description,Hsn_Code,Qty,Unit,Rate,Amount,Discount,Taxable_Amount" +
"Addcost, Sub_Total,Sub_Discount,Total_Amount, Company_ID)" +
"Значения ('"+ Billno + "', '" + custid +"', '" + dateTimePicker1.Текст + "', '" + comboShipped.Выбранное значение.ToString ()+"', '" + ONtxt.Текст + "','" + 0 + "','" +"0" + "','"
+ "0" + "','" + "0" + "','" + "0" + "','" + "0" + "','" +0 + "','"
+ semittl + "', '" + semidisc+"', '" + overallttl+"', '" + Convert.Метод todouble(пустой(addcosttxt.Текст)) + "','" + Преобразование.Метод todouble(пустой(totalamounttxt.Текст)) + "','" + скидка+ "','" + преобразование.Метод todouble(пустой(txtNewTotal.Текст)) + "'," + GlobalVariable.companyId + ")", кон);

против.Открыть();
cmd1.Метод executenonquery();
против.Закрывать();
comboBox_Custname.Текст = "";
//dateTimePicker1.Значение = Дата И Время.Теперь; ONtxt.Текст = "";
totalamounttxt.Текст = "";
comboBoxproduct.Текст = "";
дектхт.Текст = "";
combounit.Текст = "";
qtytxtprice.Текст = "";
txtqty.Текст = "";
txttax.Текст = "";
дисконт.Текст = "";
addcosttxt.Текст = "";
txtNewTotal.Текст = "";
Подтекст.Текст = "";
txtdiscount.Текст = "";
практическое руководство.Строк.Четкий();
Ящик для сообщений.Показать("Запись Успешно Вставлена ");
}

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

<pre>private void Insertbtn_Click(object sender, EventArgs e)
       {
           if (comboBox_Custname.SelectedIndex == 0)//Nothing selected
           {
               MessageBox.Show("You must select a ComboBox Values type");
               comboBox_Custname.Focus();
               return;
           }
           if (dataGridView.RowCount == 0)
           {
               MessageBox.Show("there are no items in the list to add");
               return;
           }
           string custid = "";
           if (comboBox_Custname.SelectedIndex < 0)
           {
               try
               {
                   cmd = new SqlCommand("insert into Customer_Details(CustName) values(@CustName)", con);
                   con.Open();
                   cmd.Parameters.AddWithValue("@CustName", comboBox_Custname.Text);
                   cmd.ExecuteNonQuery();
                   con.Close();
               }
               catch { }
               try
               {
                   SqlCommand cmd = new SqlCommand("SELECT max(CustID)FROM Customer_Details", con);
                   SqlDataAdapter sda = new SqlDataAdapter(cmd);
                   DataTable dt = new DataTable();
                   sda.Fill(dt);
                   custid = dt.Rows[0][0].ToString();
               }
               catch { }
           }
           else
           {
               custid = comboBox_Custname.SelectedValue.ToString();
           }


           int Billno = billno("IF NOT EXIST( Select ISNULL(Max(Billno+1),1) From MainBillForm where Company_ID=)" + GlobalVariable.companyId) ;



           double semittl=0, semidisc=0, overallttl = 0 ,  overallttl_wtax = 0;
           try
           {
               foreach (DataGridViewRow g1 in dataGridView.Rows)
               {
                   //double ttl = (Convert.ToDouble(g1.Cells[4].FormattedValue.ToString()) * Convert.ToDouble(g1.Cells[6].FormattedValue.ToString()));

                   SqlCommand cmd = new SqlCommand("insert into MainBillForm (Billno,Name,Date,Shipped_Details,Order_Number,Sno,Product_Name,Description,Hsn_Code,Qty,Unit,Rate,Amount,Discount,Taxable_Amount" +
                       "Addcost,Sub_Total,Sub_Discount,Total_Amount,Company_ID) " +
                       " Values ('" + Billno + "','" + custid + "','" + dateTimePicker1.Text + "','" + comboShipped.SelectedValue.ToString() + "','" + ONtxt.Text + "','" + Convert.ToInt16(g1.Cells[0].FormattedValue.ToString()) + "','" + g1.Cells[17].FormattedValue.ToString() + "','"
                       + g1.Cells[2].FormattedValue.ToString() + "','" + g1.Cells[3].FormattedValue.ToString() + "','" + g1.Cells[4].FormattedValue.ToString() + "','" + g1.Cells[18].FormattedValue.ToString() + "','" + g1.Cells[6].FormattedValue.ToString() + "','"
                       + g1.Cells[7].FormattedValue.ToString() + "','" + g1.Cells[8].FormattedValue.ToString() + "','" + g1.Cells[9].FormattedValue.ToString() + "','" + g1.Cells[10].FormattedValue.ToString() + "','" + g1.Cells[11].FormattedValue.ToString() + "','"
                       + g1.Cells[12].FormattedValue.ToString() + "','" + g1.Cells[13].FormattedValue.ToString() + "','" + g1.Cells[14].FormattedValue.ToString() + "','" + g1.Cells[15].FormattedValue.ToString() + "','" + 0.00 + "','" + 0.00 + "','" + 0.00 + "','" + g1.Cells[16].FormattedValue.ToString() + "','" + GlobalVariable.companyId + "')", con);
                   con.Open();
                   cmd.ExecuteNonQuery();
                   con.Close();

                   semittl = semittl + Convert.ToDouble(g1.Cells[7].FormattedValue.ToString());

Richard MacCutchan

Ваш код широко открыт для SQL-инъекций. Используйте правильные параметризованные запросы из проверенных входных данных, а не конкатенированные строки. Кроме того, не используйте строки для хранения дат/времени, используйте соответствующие типы Date или DateTime.

3 Ответов

Рейтинг:
0

Patrice T

Цитата:
Как я могу проверить, если Билла нет. уже сохраненный в базе данных, то в окне сообщения show bill no. уже существует, где идентификатор компании, у меня есть 1 billno. textbox для ввода bill no. если я не войду ни в какое нет. это автоматически увеличивает 1 на 1. Если я введу любое другое нет, как: 11, что магазин и начать увеличивать 11, один за другим.

Вся эта идея неверна, потому что она несовместима с многопользовательскими приложениями.
SQL автоматическое увеличение поля[^]

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


Рейтинг:
0

Dave Kreskowiak

Первый вопрос: почему?

Нет никакой причины делать это вообще. Пользователи не должны иметь возможности генерировать свои собственные номера счетов. Вместо этого они должны быть назначены базой данных.

Кроме того, выполнение "SELECT MAX(id) + 1" не работает в многопользовательской среде. Несколько клиентов могут выполнить этот код одновременно, и в конечном итоге у вас будет несколько клиентов, пытающихся использовать один и тот же идентификационный номер одновременно. Как ты собираешься с этим справиться?

Вы не. Этого легко избежать.


Deekshaa Singh Chauhan

он генерируется автоматически, но когда я присваиваю значение с помощью textbox, он принимает это число в качестве присваивающего значения и начинает увеличивать это число

Dave Kreskowiak

Почему вы вообще присваиваете ключевое значение? Это совсем не то, для чего нужна автогенерируемая колонка, и она просто вызовет у вас проблемы.

Deekshaa Singh Chauhan

он отлично работает, но я хочу проверить, существует ли номер текстового поля в базе данных или нет

Deekshaa Singh Chauhan

это следующее значение проверки кода, но я запутался, где я разместил этот код



частная txtbill_Validated недействительным(объект отправителя, EventArgs в электронной)
{
если (txtbill.Текст! = "" )
{

SqlDataAdapter sda = new SqlDataAdapter ("SELECT Billno FROM MainBillForm WHERE Billno = '" + txtbill.Text + "' и Company_ID = " + GlobalVariable. companyId, con);
DataTable dt = новый DataTable();
ПДД.Заполнить(ДТ);

если (ДТ.Строк.Рассчитывать.ToString () ! = " 1")
{

Ящик для сообщений.Show ("Уже Существует");
txtbill.Текстовая строка.Пустой;
}
еще
{

}
}
}

Dave Kreskowiak

Как я или кто-либо другой должен знать, куда должен идти этот код? Мы понятия не имеем, для чего он используется.

Рейтинг:
0

Thomas Nielsen - getCore

Изменение от:

//cmd = new SqlCommand("IF NOT EXISTS (SELECT Billno FROM MainBillForm WHERE Company_ID = Company_ID)Select ISNULL(Max(Billno+1),1) From MainBillForm where Company_ID=" + GlobalVariable.companyId, con);


ТО:

//To get the next number, presuming your GlobalVariable.companyId is a number.
cmd = new SqlCommand("SELECT max(Billno) + 1 FROM MainBillForm WHERE Company_ID = "+ GlobalVariable.companyId, con);
int nextBillNo = (int)cmd.ExecuteScalar();