Loplac92
Loplac92

Reputation: 63

SqlException was unhandled in C# - Information into Database Table

I'm new to coding in C# and have looked around but finding it hard to extrapolate an answer for my problem.

I'm currently just trying to get to grips with adding text and selected text from a combobox into a simple database table. However when I try to add the information I get an error of SqlException was unhandled. I've looked at other answers and saw it maybe something to do with adding a connection, which I've tried but it's still not working...

My code and error message as in the image link below but just in case here is my code also,

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.Data.SqlClient;
using System.Windows.Forms;

namespace SavetoDbTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            using (SqlConnection test = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\User\\Documents\\Visual Studio 2015\\Projects\\SavetoDbTest\\SavetoDbTest\\Hobbie.mdf;Integrated Security=True")) 
            {
                using (SqlCommand again = new SqlCommand())
                {
                    again.CommandText = "INSERT INTO Table Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";

                    again.Parameters.AddWithValue("@Name", textBox1.Text);
                    again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
                    again.Connection = test;
                    test.Open();
                    again.ExecuteNonQuery();
                    test.Close();
                    MessageBox.Show("Data Entry Successful");

                }
            }      
        }
    }
}

enter image description here

Upvotes: 1

Views: 658

Answers (5)

Imran Sh
Imran Sh

Reputation: 1774

Use this instead of:

private void button1_Click(object sender, EventArgs e)
{
    using (SqlConnection test = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\User\\Documents\\Visual Studio 2015\\Projects\\SavetoDbTest\\SavetoDbTest\\Hobbie.mdf;Integrated Security=True")) 
    {
        using (SqlCommand again = new SqlCommand())
        {
            again.CommandText = "INSERT INTO [TableName] Values(@Name,@Hobby)";
            again.Parameters.AddWithValue("@Name", textBox1.Text);
            again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
            again.Connection = test;
            test.Open();
            again.ExecuteNonQuery();
            test.Close();
            MessageBox.Show("Data Entry Successful");
         }
    }      
}

Upvotes: 2

iSensical
iSensical

Reputation: 757

there are 3 issues in your code. 1) you have reserved keyword for table name, Table 2) SQL query you are building from code is incorrect. 3) You need to specify your command type.

Solution: Change table name to something meaningful, like employeedata or testdata and modify your code according to given below.

again.CommandType =  CommandType.Text;
again.CommandText = "INSERT INTO TestData(ColumnName1,ColumnName2) Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";
               again.Connection = test;
                test.Open();
                again.ExecuteNonQuery();
                test.Close();
                MessageBox.Show("Data Entry Successful");

Upvotes: 1

Thorsten Dittmar
Thorsten Dittmar

Reputation: 56697

+1 for trying to use parameterized queries! But you're not doing it right :-)

again.CommandText = "INSERT INTO Table Values('" + textBox1.Text + "', '" + comboBox1.Text + "')";
again.Parameters.AddWithValue("@Name", textBox1.Text);
again.Parameters.AddWithValue("@Hobby", comboBox1.Text);

This add parameters when the query string doesn't expect them. Probably this is also the cause for the exception you're seeing.

Your query string must look like this:

again.CommandText = "INSERT INTO [Table] Values(@Name, @Hobby)";

Also, TABLE is a reserved word in SQL. So if your table is named Table, you should wrap it in square brackets.

Upvotes: 5

Tomas Smagurauskas
Tomas Smagurauskas

Reputation: 706

Precisely this exception is being thrown because table is a reserved keyword. SQL engine encounters this reserved keyword, when it expects to find a proper name of the table and thus throws an exception. Try specifiying correct table name, because I believe this table name was given just as an example.

Your statement should look a little bit more like this INSERT INTO MyTable Values ...

Other answers about using parametrized query in incorrect way are also valid.

Upvotes: 1

HEEN
HEEN

Reputation: 4721

As mentioned by PaulF it is always a good practise to use Try..Catch block. It will give you the exception message if the code doesn't works for you. Here you go.

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        using (SqlConnection test = new SqlConnection("YourConnectionStringName"))
        {
            using (SqlCommand again = new SqlCommand())
            {
                again.CommandText = "INSERT INTO Table Values(@Name,@Hobby)";
                again.Parameters.AddWithValue("@Name", textBox1.Text);
                again.Parameters.AddWithValue("@Hobby", comboBox1.Text);
                again.Connection = test;
                test.Open();
                again.ExecuteNonQuery();
                test.Close();
                MessageBox.Show("Data Entry Successful");

            }
        }
    }
    catch (Exception ex)
    {   
        throw ex;
    }
}

Check whether it is working or not. Hope atleast it will give you one step ahead result to let you know if any exception arises

Upvotes: 1

Related Questions