AttaUrRahman Ответов: 2

Мое кодирование не работает


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

- Необработанное исключение типа "система".InvalidOperationException' произошло в System.Data.dll

Дополнительная информация: ExecuteNonQuery: свойство Connection не было инициализировано."
---------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Data_Entry
{
    public partial class mainform : Form
    {
        SqlConnection sqlcon;
        public SqlConnection open()
        {
            sqlcon = new SqlConnection("Data source='LAPTOP-RSHUE2L7\\SQLEXPRESS';initial catalog ='Data Entry'; integrated security ='SSPI';");
            sqlcon.Open();
            return sqlcon;
        }
        public mainform()
        {
            InitializeComponent();
        }

        private void groupControl1_Paint(object sender, PaintEventArgs e)
        {

        }

        private void Buttonsubmitt_Click(object sender, EventArgs e)
        {
            ep.ClearErrors();
            string srno, name, fthername, gendr, cnic, mobile, dob, adrs, vc, thsl, dstrct, ocptn;
            srno = textEditserialno.Text.Trim();
            name = textEditname.Text.Trim();
            fthername = textEditfathername.Text.Trim();
            gendr = comboBoxgender.SelectedIndex.ToString();
            cnic = textEditcnic.Text.Trim();
            mobile = textEditmobileno.Text.Trim();
            dob = dateEditdob.EditValue.ToString();
            adrs = textEditaddress.Text.Trim();
            vc = textEditvc.Text.Trim();
            thsl = textEdittehsil.Text.Trim();
            dstrct = textEditdistrict.Text.Trim();
            ocptn = textEditoccupation.Text.Trim();
            string q = string.Format("Insert into entry(serialno,name, fathername,gender,cnic,mobile,birthdate,address,vc,tehsil,district,occupation) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')", srno, name, fthername, gendr, cnic, mobile, dob, adrs, vc, thsl, dstrct, ocptn);
            SqlCommand sc = new SqlCommand(q);
            sc.ExecuteNonQuery();


        }
    }
}


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

я пробовал так много раз, но не могу найти никакого решения.

2 Ответов

Рейтинг:
16

j snooze

Вам нужно сообщить своей команде SQLCommand, что такое ваше sql-соединение.
в этом случае

SqlCommand sc = new SqlCommand(q,sqlcon);


в настоящее время ваш код просто сообщает команде, какую строку SQL выполнить, не сообщая ей, какое соединение sql использовать. Перед выполнением команды убедитесь, что ваше соединение настроено и открыто. (Я говорю это потому, что не заметил, где вы вызываете метод, который создает и открывает ваше SQL-соединение, хотя код там есть).

Поэтому где-то в вашей загрузке формы или при нажатии кнопки вам нужно вызвать свой метод "open ()", чтобы открыть это sql-соединение. Затем я бы рекомендовал закрыть его и очистить после себя, когда вы закончите с командой connection and sql. Я знаю, что .NET занимается сбором мусора, но уборка за собой-это просто хорошая практика, на мой взгляд.


Рейтинг:
1

Patrice T

string q = string.Format("Insert into entry(serialno,name, fathername,gender,cnic,mobile,birthdate,address,vc,tehsil,district,occupation) values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')", srno, name, fthername, gendr, cnic, mobile, dob, adrs, vc, thsl, dstrct, ocptn);

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


AttaUrRahman

- Спасибо, Сэр.
Смотрите этот код. правильно это или нет. я имею в виду запрос.

частная button_save_Click недействительным(объект отправителя, EventArgs в электронной)
{
Дата-время дата = дата-время.Синтаксический анализ (datee.Метод toString());
строковый параметр StartTime = tb_starttime.Текст.Отделка();
строка endtime = tb_endtime.Text.Trim();
строка patienttype = cb_patienttype.Элемент.Метод toString();
строка patientfee = tb_patientfee.Text.Trim();
строка patientname = tb_patientname.Text.Trim();
строка phonenumber = tb_phonenumber.Text.Trim();
строка appointmenttype = cb_apointmenttype.Элемент.Метод toString();
строка вставки = строка.Формат("вставить в значения врача('{0}','{1}','{2}','{3}',{4},'{5}',{6},'{7}')" ,Дата, Время начала, Время окончания,тип пациента,patientfee,имя пациента,номер телефона,тип назначения );
Sqlcommand, который scomm = новый sqlcommand объект(вставка, ЦАП.открыть());
скомм.Метод executenonquery();

}