user5730942
user5730942

Reputation: 75

C# - add multiple values to a parameter in MySQL

So I want to store multiple values to one parameter. Something like adding a row to a column. I've been trying this with the following: storeData.Parameter.AddWithValue()

This sadly doesn't work, because it says that subjects, which I'm using in the following code, is already difined. I'm not that experienced with MySQL yet so I don't really know another way to do this. Here is my code:

        string conString = @"Data Source=MYIP; Port=3306; Initial Catalog=MYCATALOG; User ID=USERNAME; Password=PASS;Integrated Security=true;";
        MySqlConnection SalesKicker;
        SalesKicker = new MySqlConnection(conString);

        try
        {
            SalesKicker.Open();

            MySqlCommand tabCreator = new MySqlCommand("CREATE TABLE " + dt.bedrijfsNaam + " (subjects TEXT , jrLijks INT , kwrt INT , mnd INT , wek INT , dag INT)", SalesKicker);
            tabCreator.ExecuteNonQuery();
            MySqlCommand storeData = new MySqlCommand("INSERT INTO " + dt.bedrijfsNaam+ " (subjects, jrLijks, kwrt, mnd, wek, dag)" + "VALUES (@subjects, @jrLijks, @kwrt, @mnd, @wek, @dag)", SalesKicker);

            string[] subjects = new string[] { "Prospects", "Hot Prospect", "Afspraken Maken", "Afspraken", "Offertes Maken", "Gescoorde Offertes", "Nieuwe Klanten" };
            for (int i = 0; i < subjects.Length; i++) {
                storeData.Parameters.AddWithValue("@subjects", subjects[i]);
                if(i == 0)
                {
                    storeData.Parameters.AddWithValue("@jrLijks", dt.skProspects * 12);
                    storeData.Parameters.AddWithValue("@kwrt", dt.skProspects * 3);
                    storeData.Parameters.AddWithValue("@mnd", dt.skProspects);
                    storeData.Parameters.AddWithValue("@wek", (dt.skProspects * 12) / 52);
                    storeData.Parameters.AddWithValue("@dag", (dt.skProspects * 12) / 365);
                }
                //these if statements are used for every subject
                storeData.ExecuteNonQuery();
                SalesKicker.Close();
        }

The code stops after it adds "Prospects". What am I doing wrong here? Can someone help me with this?

this is the error I`m getting:

{"Parameter 'subjects' has already been defined."}

ow, and dt.bedrijfsNaam gets its value through the dt class

Thanks in advance

Upvotes: 0

Views: 674

Answers (2)

Viru
Viru

Reputation: 2246

Check below code

    string conString = @"Data Source=MYIP; Port=3306; Initial Catalog=MYCATALOG; User ID=USERNAME; Password=PASS;Integrated Security=true;";
            MySqlConnection SalesKicker;
            SalesKicker = new MySqlConnection(conString);

            try
            {
                SalesKicker.Open();

                MySqlCommand tabCreator = new MySqlCommand("CREATE TABLE " + dt.bedrijfsNaam + " (subjects TEXT , jrLijks INT , kwrt INT , mnd INT , wek INT , dag INT)", SalesKicker);
                tabCreator.ExecuteNonQuery();
                MySqlCommand storeData = new MySqlCommand("INSERT INTO " + dt.bedrijfsNaam+ " (subjects, jrLijks, kwrt, mnd, wek, dag)" + "VALUES (@subjects, @jrLijks, @kwrt, @mnd, @wek, @dag)", SalesKicker);

                string[] subjects = new string[] { "Prospects", "Hot Prospect", "Afspraken Maken", "Afspraken", "Offertes Maken", "Gescoorde Offertes", "Nieuwe Klanten" };
storeData.Parameters.Add("@subjects");
storeData.Parameters.AddWithValue("@jrLijks", dt.skProspects * 12);
                    storeData.Parameters.AddWithValue("@kwrt", dt.skProspects * 3);
                    storeData.Parameters.AddWithValue("@mnd", dt.skProspects);
                    storeData.Parameters.AddWithValue("@wek", (dt.skProspects * 12) / 52);
                    storeData.Parameters.AddWithValue("@dag", (dt.skProspects * 12) / 365);

                for (int i = 0; i < subjects.Length; i++) {
                    storeData.Parameters["@subjects"].Value=subjects[i];

                    //these if statements are used for every subject
                    storeData.ExecuteNonQuery();

            }
    SalesKicker.Close();

Upvotes: 1

Mathijs
Mathijs

Reputation: 383

If you want to reuse parameters, you should call

command.Parameters.Clear();

before executing the command.

In your case it would be good to add this line right after the opening brackets of your for loop.

Upvotes: 3

Related Questions