Avatar of ShannonCallahan
ShannonCallahan
 asked on

If statement inside of foreach loop.

I have the following statement to save information to an Access db:

private void testButton_Click(object sender, EventArgs e)
        {

            try
            {
                //Create OleDB connection
                OleDbConnection connection = new OleDbConnection();
                connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=MyDb;
Persist Security Info=False;";

                //connect to DB
                connection.Open();

                //Setup 
                var ComboBoxList = Controls.OfType<ComboBox>();
                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;

                //loop
                foreach (ComboBox taskComboBox in ComboBoxList)
                {
                    //Setup loop to assigned comboxes to corresponding stopwatch.
                    switch (taskComboBox.Name)
                    {
                        case "taskcombobox1":
                            stopwatch = stopwatch1;
                            break;
                        case "taskcombobox2":
                            stopwatch = stopwatch2;
                            break;
                        case "taskcombobox3":
                            stopwatch = stopwatch3;
                            break;
                        case "taskcombobox4":
                            stopwatch = stopwatch4;
                            break;
                        case "taskcombobox5":
                            stopwatch = stopwatch5;
                            break;
                        case "taskcombobox6":
                            stopwatch = stopwatch6;
                            break;
                        case "taskcombobox7":
                            stopwatch = stopwatch7;
                            break;
                        case "taskcombobox8":
                            stopwatch = stopwatch8;
                            break;
                        case "taskcombobox9":
                            stopwatch = stopwatch9;
                            break;
                        case "taskcombobox10":
                            stopwatch = stopwatch10;
                            break;
                        case "taskcombobox11":
                            stopwatch = stopwatch11;
                            break;
                        case "taskcombobox12":
                            stopwatch = stopwatch12;
                            break;
                        case "taskcombobox13":
                            stopwatch = stopwatch13;
                            break;
                        case "taskcombobox14":
                            stopwatch = stopwatch14;
                            break;
                        case "taskcombobox15":
                            stopwatch = stopwatch15;
                            break;
                        default:
                            break;

                    }
                    if (taskComboBox.Text != null)
                    {
                        //Insert data into table through loop
                        string query = "INSERT INTO MasterTable(Task, TimeWorked, RefDate, Analyst, HoursWorked) values('" + taskComboBox.Text + "', '" + stopwatch.Elapsed.ToString("hh\\:mm\\:ss") + "', '" + ReferenceDate + "', '" + AnalystName + "', '" + (stopwatch.Elapsed.TotalMinutes / 60d).ToString("N2") + "')";
                        command.CommandText = query;
                        command.ExecuteNonQuery();
                    }
                }

                //close connection to db
                connection.Close();
            }
            //handle errors
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex);
            }
}

Open in new window


I tried using an if statement inside the foreach statement to notrun the SQL insert command for that combobox if it's value is null:

if (taskComboBox.Text != null)
                    {
                        //Insert data into table through loop
                        string query = "INSERT INTO MasterTable(Task, TimeWorked, RefDate, Analyst, HoursWorked) values('" + taskComboBox.Text + "', '" + stopwatch.Elapsed.ToString("hh\\:mm\\:ss") + "', '" + ReferenceDate + "', '" + AnalystName + "', '" + (stopwatch.Elapsed.TotalMinutes / 60d).ToString("N2") + "')";
                        command.CommandText = query;
                        command.ExecuteNonQuery();
                    }

Open in new window


This does not work. I am not sure it is because of the placement of the command. Any ideas?

Thank you,
Shannon
C#SQL

Avatar of undefined
Last Comment
it_saige

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Sam Jacobs

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
ShannonCallahan

ASKER
2/2! Thank you! I wonder why if (taskComboBox.Text != "") works but if (taskComboBox.Text != null) does not?
ShannonCallahan

ASKER
Thank you again! Saving me on this deadline!
Shannon
SOLUTION
Norie

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
Sam Jacobs

Because null is the absence of ANY value, which is different then an empty string value.
Your help has saved me hundreds of hours of internet surfing.
fblack61
ShannonCallahan

ASKER
Thank you both for the assistance. Both methods work, probably use the if (taskComboBox.SelectedIndex > -1) for this one. Thank you!!!
it_saige

*NO POINTS*

For explicit string comparisons two better options would be the string methods IsNullOrEmpty and IsNullOrWhitespace

-saige-