البرمجة

تحسين إدراج البيانات في C# باستخدام بارامترات الاستعلام

المشكلة التي تواجهها في برنامجك هي خطأ في بنية جملة الإدخال (INSERT INTO) في الاستعلام الذي تقوم بتنفيذه على قاعدة البيانات. يتمثل الخطأ في وجود فاصلة زائدة (,) بعد اسم حقل “Posicion_product” في الجملة الإدخالية. عليك إزالة هذه الفاصلة لتصحيح الاستعلام وتجنب حدوث الخطأ.

بالطريقة التي كتبت بها الاستعلام، يتوقع برنامج قاعدة البيانات أن يكون هناك حقول بعد “Posicion_product”، ولكنه لا يجدها، مما يؤدي إلى حدوث الخطأ الذي ذكرته.

بعد تعديل الكود، يجب أن يبدو كالتالي:

csharp
private void save_btn_Click(object sender, EventArgs e) { OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Stock.accdb"); con.Open(); for (int i = 0; i < dataGridView_insert.Rows.Count; i++) { OleDbCommand cmd = new OleDbCommand("INSERT INTO product(OV, Reference, Cod_Client, Client, Qtd, Type_product, Posicion_product) VALUES ('" + dataGridView_insert.Rows[i].Cells["OV"].Value + "','" + dataGridView_insert.Rows[i].Cells["Reference"].Value + "','" + dataGridView_insert.Rows[i].Cells["Cod_Client"].Value + "','" + dataGridView_insert.Rows[i].Cells["Client"].Value + "','" + dataGridView_insert.Rows[i].Cells["Qtd"].Value + "','" + dataGridView_insert.Rows[i].Cells["Type_product"].Value + "','" + dataGridView_insert.Rows[i].Cells["Posicion_product"].Value + "')", con); cmd.ExecuteNonQuery(); } con.Close(); }

بعد إجراء هذه التغييرات، يجب أن يتم إدخال البيانات بنجاح إلى قاعدة البيانات دون وجود أي رسائل خطأ تشير إلى مشكلة في بنية الاستعلام.

المزيد من المعلومات

بالتأكيد، إليك الاستكمال:

عند تنفيذ الكود الجديد، يمكنك الآن الوثوق بأن بياناتك ستتم إدراجها بنجاح في قاعدة البيانات بدون وجود أي مشكلات في بنية الاستعلام.

مع ذلك، يجب أن نلاحظ أن الطريقة التي تم بها إنشاء الاستعلام في الكود يمكن أن تجعل البرنامج عرضه لهجوم SQL Injection إذا تم إدخال بيانات غير صالحة. لتجنب ذلك، يُفضل استخدام بارامترات الاستعلام المعلمة بدلاً من تضمين القيم مباشرة في الاستعلام. هذا الأمر يساعد على حماية التطبيق من الهجمات ويجعله أكثر أماناً.

في الإصدارات الحديثة من C# وADO.NET، يمكنك استخدام معالجة البارامترات لتطبيق هذا التحسين. بمجرد استخدام البارامترات، يمكن للنظام التعامل مع القيم بشكل آمن دون خطر تعرض التطبيق لهجمات.

إليك كيفية تحسين الكود باستخدام بارامترات الاستعلام:

csharp
private void save_btn_Click(object sender, EventArgs e) { string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Stock.accdb"; using (OleDbConnection con = new OleDbConnection(connectionString)) { con.Open(); for (int i = 0; i < dataGridView_insert.Rows.Count; i++) { string query = "INSERT INTO product(OV, Reference, Cod_Client, Client, Qtd, Type_product, Posicion_product) VALUES (?, ?, ?, ?, ?, ?, ?)"; using (OleDbCommand cmd = new OleDbCommand(query, con)) { cmd.Parameters.AddWithValue("?", dataGridView_insert.Rows[i].Cells["OV"].Value); cmd.Parameters.AddWithValue("?", dataGridView_insert.Rows[i].Cells["Reference"].Value); cmd.Parameters.AddWithValue("?", dataGridView_insert.Rows[i].Cells["Cod_Client"].Value); cmd.Parameters.AddWithValue("?", dataGridView_insert.Rows[i].Cells["Client"].Value); cmd.Parameters.AddWithValue("?", dataGridView_insert.Rows[i].Cells["Qtd"].Value); cmd.Parameters.AddWithValue("?", dataGridView_insert.Rows[i].Cells["Type_product"].Value); cmd.Parameters.AddWithValue("?", dataGridView_insert.Rows[i].Cells["Posicion_product"].Value); cmd.ExecuteNonQuery(); } } } }

باستخدام هذا الكود، ستتمتع بتطبيق أكثر أمانًا واستقرارًا، وسيتم إدراج البيانات بنفس الكفاءة التي كانت عليها مع الاستعلام السابق.

زر الذهاب إلى الأعلى