Click here to Skip to main content
15,889,281 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
Data won't get entered in the database. But it runs.. what should I do?
using System.Data.OleDb;

namespace TO_Inspection_Leaving_Form
{
    public partial class SLIC_TOILForm : Form
    {
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Kalindu Washington\Downloads\TOInspectionLeaving_Database.accdb");
        public SLIC_TOILForm()
        {
            InitializeComponent();
        }

        private void btn_Submit_Click(object sender, EventArgs e)
        {
            con.Open();
            OleDbCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into TOInspectionRecordTable (TO_Name,Emp_ID,Inq_ID,Policy_No,InqVeh_No) values('" + txt_TOName.Text + "','" + txt_EmpID.Text + "','" + txt_InqID.Text + "','" + txt_PolNo.Text + "','" + txt_InqVehNo.Text + "')";
            cmd.ExecuteNonQuery();
            con.Close();
            MessageBox.Show("Record Submitted");

        }
    }
}


What I have tried:

Tried again and again but don't seem to work.
Posted
Updated 10-Dec-19 22:27pm

Don't do it like that! Never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Always use Parameterized queries instead.

When you concatenate strings, you cause problems because SQL receives commands like:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
The quote the user added terminates the string as far as SQL is concerned and you get problems. But it could be worse. If I come along and type this instead: "x';DROP TABLE MyTable;--" Then SQL receives a very different command:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Which SQL sees as three separate commands:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';
A perfectly valid SELECT
SQL
DROP TABLE MyTable;
A perfectly valid "delete the table" command
SQL
--'
And everything else is a comment.
So it does: selects any matching rows, deletes the table from the DB, and ignores anything else.

So ALWAYS use parameterized queries! Or be prepared to restore your DB from backup frequently. You do take backups regularly, don't you?

Fix that throughout your app, and you may find your problem goes away.
 
Share this answer
 
The OleDbCommand.ExecuteNonQuery Method (System.Data.OleDb) | Microsoft Docs[^] returns a value that lets you know how many rows were inserted. So you need to check that value in your code; do not assume that your insert command has been successful - as you are doing.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900