vermaji_vermaji Ответов: 2

Чтобы вставить более одного значения combobox в базу данных access с помощью приложения C# windows.


Я хочу вставить значения combobox в базу данных access с помощью приложения C# windows. Он позволяет только одному combobox вставлять значение в базу данных. Как я могу вставить в базу данных более одного значения combobox?

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

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.Oledb.12.0; Data Source= school.accdb");
                string query = "Insert into stu_registration (CLASS, SECTION) values ('" + comboBox101.Text + "', '"+comboBox102.Text+"')";
                
                
                OleDbCommand cmd = new OleDbCommand(query, con);
                


                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
            }

2 Ответов

Рейтинг:
1

Maciej Los

Две вещи:

1) Ваш код таков SQL-инъекция[^] уязвимый!
Вам следует избегать использования конкатенированной строки в качестве запроса. Вместо этого используйте параметризованные запросы.

string sConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\school.accdb;Persist Security Info =False;";
DataTable dt = new DataTable();

//student id to find
int stuIdToFind = 111; 
//select statement
string sComm = "SELECT Stu.* FROM Students AS Stu WHERE Stu.StuId=?;";

using (OleDbConnection oConn = new OleDbConnection(sConn))
	{
		oConn.Open();
		using (OleDbCommand oComm  = new OleDbCommand(sComm, oConn))
		{
			//add parameter with value
			oComm.Parameters.Add(new OleDbParameter(){Value=stuIdToFind});
			using (OleDbDataReader oRdr = oComm.ExecuteReader())
			{
				dt.Load(oRdr);
			}
		}
	}



2) Вы используете SECTION как имя поля, но(!) это слово является одним из зарезервированных слов в MS Access.
Видеть: Список зарезервированных слов в Access - Office | Microsoft Docs[^]
Я бы предложил изменить имя поля или использовать квадратные скобки вокруг имени Поля:
SELECT [SECTION] FROM YourTableName;


Рейтинг:
0

OriginalGriff

В дополнение к очень точным комментариям Мацея, вы можете вставить несколько строк (если это то, что вы пытаетесь сделать несколькими способами:
1) Используйте множественную вставку

INSERT INTO MyTable (Col1, Col2) VALUES (1, 2), (3, 4), 5, 6)
Но в вашем случае это все равно будет уязвимо для SQL-инъекций.
2) Выполните операцию вставки в цикле.
3) Используйте DataTable и вставляйте через DataAdapter: c# - вставка записей набора данных в базу данных - переполнение стека[^]