How to get an object class into SQL Query c#?

Question

I would like to put the values of object 'gebruiker' from class 'Gebruikersklasse' to the query in the buttonclick. The query will be sended to the 'Databaseconnection' class and will be executed there. I'm getting an error if I run this. It tells me that gebruikers.Naam can't be found. So he can't find an object called 'gebruiker' i think?

If I change the query to manually values, it works.

I am using these classes:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BurnThatFat
{
    class Gebruikerklasse
    {
        public string Naam;
        public string Achternaam;
        public int Leeftijd;
        public string Geslacht;
        public int Huidiggewicht;
        public int Streefgewicht;
        public string Gebruikersnaam;
        public string Email;
        public string Wachtwoord;

    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// voor sql connectie.
using System.Data.SqlClient;
using System.Windows.Forms;

and this is the code for the databaseconnection (executing the query's)

namespace BurnThatFat
{

  class databaseconnection
  {
    string connectionString = @"Data Source=(LocalDB)\V11.0;AttachDbFilename=C:\Users\Cihan\Documents\BurnThatFat\BurnThatFat\Database2.mdf;Integrated Security=True";



    public void QuerryToDatabase(string commandText, Gebruikerklasse gebruiker)
    {

        using (SqlConnection conn = new SqlConnection(connectionString))
        using (SqlCommand cmd = new SqlCommand(commandText, conn))
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            conn.Close();

        }
    }
  }
}

and this is the buttonclick code:

buttonClick

private void btn_emailvolgende_Click(object sender, EventArgs e)
{
    gebruiker = new Gebruikerklasse();
    gebruiker.Naam = Convert.ToString(tb_voornaam.Text);
    gebruiker.Achternaam = Convert.ToString(tb_achternaam.Text);
    gebruiker.Leeftijd = Convert.ToInt32(nud_leeftijd.Value);
    gebruiker.Geslacht = Convert.ToString(cb_geslacht.Text);
    gebruiker.Huidiggewicht = Convert.ToInt32(nud_huidiggewicht.Value);
    gebruiker.Streefgewicht = Convert.ToInt32(nud_streefgewicht.Value);
    gebruiker.Gebruikersnaam = Convert.ToString(tb_gebruikersnaam2.Text);
    gebruiker.Email = Convert.ToString(tb_email.Text);
    gebruiker.Wachtwoord = Convert.ToString(tb_wachtwoordsignup.Text);

    db.QuerryToDatabase("INSERT INTO Gebruiker ([Gebruiker-ID], Naam, Achternaam, Leeftijd, Geslacht, Huidig_gewicht, Streef_gewicht, Gebruikersnaam, Email, Wachtwoord) VALUES(1, gebruiker.Naam, gebruiker.Achternaam, gebruiker.Leeftijd, gebruiker.Geslacht, gebruiker.Huidiggewicht, gebruiker.Streefgewicht, gebruiker.Gebruikersnaam, gebruiker.Email, gebruiker.Wachtwoord);", gebruiker);
    gb_email.Visible = false;
}

Edit:

The exact error that i'm getting:

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in BurnThatFat.exe

Additional information: The multi-part identifier "gebruiker.Naam" could not be bound.

The multi-part identifier "gebruiker.Achternaam" could not be bound.

The multi-part identifier "gebruiker.Leeftijd" could not be bound.

The multi-part identifier "gebruiker.Geslacht" could not be bound.

The multi-part identifier "gebruiker.Huidiggewicht" could not be bound.

The multi-part identifier "gebruiker.Streefgewicht" could not be bound.

The multi-part identifier "gebruiker.Gebruikersnaam" could not be bound.

The multi-part identifier "gebruiker.Email" could not be bound.

The multi-part identifier "gebruiker.Wachtwoord" could not be bound.

Show source
| class   | c#   | sql-server   2017-01-06 13:01 2 Answers

Answers to How to get an object class into SQL Query c#? ( 2 )

  1. 2017-01-06 13:01

    You need to pass gebruiker values to the SQL command. Right now you're not doing that. Your QuerryToDatabase should be extended with argument passing

    public void QuerryToDatabase(string commandText, Gebruikerklasse gebruiker)
    {
    
        using (SqlConnection conn = new SqlConnection(connectionString))
        using (SqlCommand cmd = new SqlCommand(commandText, conn))
        {
            conn.Open();
            cmd.Parameters.AddWithValue("@Naam", gebruiker.Naam);
            cmd.Parameters.AddWithValue("@Achternaam, gebruiker.Achternaam);
            // do the same with others properties in gebruiker
    
            cmd.ExecuteNonQuery();
            conn.Close();
        }
    }
    

    also your query is wrong. You need to tell SQL where it should look for parameters.

    "INSERT INTO Gebruiker ([Gebruiker-ID], Naam, Achternaam, Leeftijd, Geslacht, Huidig_gewicht, Streef_gewicht, Gebruikersnaam, Email, Wachtwoord) VALUES(1, @Naam, @Achternaam, @Leeftijd, @Geslacht, @Huidiggewicht, @Streefgewicht, @Gebruikersnaam, @Email, @Wachtwoord);
    

    The names in the SQL query and names used in AddWithValue should match.

    If you do not want to do that manually - have a look at ORMs.

  2. 2017-01-06 13:01

    You're getting that error because SQL is not finding any table or reference with that name, you can achieve something similar with a stored procedure.

    First create the procedure in sql:

    CREATE PROCEDURE insertGebruiker(
        @Naam VARCHAR(50),
        @Achternaam VARCHAR(50),
        @Leeftijd INT, 
        @Geslacht VARCHAR(50),
        @Huidiggewicht INT,
        @Streefgewicht INT,
        @Gebruikersnaam VARCHAR(50),
        @Email VARCHAR(50),
        @Wachtwoord VARCHAR(50),
    )
    AS
    BEGIN
    INSERT INTO Gebruiker(
        [Gebruiker-ID],
        Naam,
        Achternaam,
        Leeftijd, 
        Geslacht,
        Huidig_gewicht,
        Streef_gewicht,
        Gebruikersnaam,
        Email,
        Wachtwoord) 
        VALUES (
        1,
        @Naam,
        @Achternaam,
        @Leeftijd , 
        @Geslacht,
        @Huidiggewicht ,
        @Streefgewicht ,
        @Gebruikersnaam ,
        @Email,
        @Wachtwoord,
    )
    END
    

    Now from your c# code:

    public void QuerryToDatabase(string procedureName, Gebruikerklasse gebruiker)
        {
    
            using (SqlConnection conn = new SqlConnection(connectionString))
            using (SqlCommand cmd = new SqlCommand(procedureName, conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
    
                cmd.Parameters.AddWithValue("@Naam", gebruiker.Naam);
                cmd.Parameters.AddWithValue("@Achternaam", gebruiker.Achternaam);
                cmd.Parameters.AddWithValue("@Leeftijd", gebruiker.Leeftijd);
                cmd.Parameters.AddWithValue("@Geslacht", gebruiker.Geslacht);
                cmd.Parameters.AddWithValue("@Huidiggewicht", gebruiker.Huidiggewicht);
                cmd.Parameters.AddWithValue("@Streefgewicht", gebruiker.Streefgewicht);
                cmd.Parameters.AddWithValue("@Gebruikersnaam", gebruiker.Gebruikersnaam);
                cmd.Parameters.AddWithValue("@Email", gebruiker.Email);
                cmd.Parameters.AddWithValue("@Wachtwoord", gebruiker.Wachtwoord);
    
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
    
            }
        }
    

    And you just call it using the name of your procedure:

    db.QuerryToDatabase("insertGebruiker", gebruiker);
    

Leave a reply to - How to get an object class into SQL Query c#?

◀ Go back