Ошибка в SQL - Нет Сообщение об ошибке - Команда не выполняется - PullRequest
0 голосов
/ 05 февраля 2019

Я работаю над приложением базы данных для управления активами для моей компании.У меня нет большого опыта работы с SQL или MS Access для управления базами данных.Я работаю над решением для добавления данных в базу данных, используя C # в Visual Studio, выполняя команды SQL.Я работал над некоторыми текстовыми полями, чтобы выяснить, работает ли мой код в разных местах или нет, и я (я думаю) сузил его до своего SQL, хотя я точно не знаю, я не нашел многоо Access и OleDb с помощью поиска.

Я изменил заглавные буквы и фразы, а также запятые и кавычки для моего кода SQL, а также запекал там, где мои ошибки могли быть обнаружены кодом.

private void SubmitButton_Click(object sender, EventArgs e)
        {
                try
                {
                    //declares connection
                    OleDbConnection con = new OleDbConnection();
                    OleDbCommand command = new OleDbCommand();
                    con.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\eric.varner\Documents\AssetDB.accdb";
                    //open connection to Database
                    con.Open();
                    StatusLabel.Text = "Connected";
                    //declares command type
                    command.Connection = con;

                    //SQL  commands to call database to write data.

                    if (AssetTypeBox.Text == "iPad")
                    {
                        command.CommandText = "INSERT INTO AssetsiPad (Asset Tag, Condition, Location, Serial Number) VALUES('" + AssetBox.Text + "','" + ConditionBox.Text +
                            "','" + LocationBox.Text + "','" + SerialNumBox.Text + "')";
                    MessageBox.Show("The if statement runs fine");
                    }
                    else if (AssetTypeBox.Text == "iPhone")
                    {
                        command.CommandText = "INSERT INTO AssetsiPhone (Asset Tag, Condition, Location, Serial Number) VALUES('" + AssetBox.Text + "','" + ConditionBox.Text +
                            "','" + LocationBox.Text + "','" + SerialNumBox.Text + "')";
                    }
                    else if (AssetTypeBox.Text == "MR AP")
                    {
                        command.CommandText = "INSERT INTO AssetsMR (Asset Tag, Condition, Location, Serial Number, MAC Address, IP Address) VALUES('" + AssetBox.Text + "','" 
                        + ConditionBox.Text + "','" + LocationBox.Text + "','" + SerialNumBox.Text + "','" + MACaddressBox.Text + "','" + IPsubnetBox.Text + "')";
                    }
                    else if (AssetTypeBox.Text == "MX Security")
                    {
                        command.CommandText = "INSERT INTO AssetsMX (Asset Tag, Condition, Location, Serial Number) VALUES('" + AssetBox.Text + "','" + ConditionBox.Text + "','" 
                        + LocationBox.Text + "','" + SerialNumBox.Text + "',)";
                    }
                    else if (AssetTypeBox.Text == "Laptop")
                    {
                        command.CommandText = "INSERT INTO AssetsLaptop (Asset Tag, Condition, Location, Serial Number) VALUES('" + AssetBox.Text + "','" + ConditionBox.Text + "','" 
                        + LocationBox.Text + "','" + SerialNumBox.Text + "',)";
                    }
                    else
                    {
                        MessageBox.Show("you aren't reaching the correct statement");
                    }

                    command.ExecuteNonQuery();

                    //close connection to Database
                    con.Close();
                    MessageBox.Show("Data Saved");
                }
                catch (Exception ex)
                {
                    StatusLabel.Text = "Not Connected";
                    MessageBox.Show("your sql didn't run correctly");
                }

        }

Когда я правильно ввожу свои строки, такие как «iPad», я получаю окошки с сообщениями «Оператор if работает нормально» и «Ваш SQL-код работает неправильно».AssetTypeBox - единственная вещь, в которую у меня встроены какие-либо ловушки.Другие поля должны быть в состоянии принять любой тип или количество данных без проблем.Надеюсь, я ничего не пропущу.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019
The if statement runs fine 
Your SQL didn't run correctly

вышеупомянутый результат вполне ожидаем.Ваш SQL-запрос выполняется, когда вы запускаете command.ExecuteNonQuery();, что означает, что вы не получите исключение до этого момента.

оператор if с проверкой IPad удовлетворяет и MessageBox.Show("The if statement runs fine"); запускается после этого вашкод выполняет command.ExecuteNonQuery(); и возникает исключение.

, поскольку у вас есть блок исключений, ошибка обрабатывается с помощью кода ниже

 StatusLabel.Text = "Not Connected";
 MessageBox.Show("your sql didn't run correctly");
0 голосов
/ 05 февраля 2019

Я думаю, что команда INSERT не может принимать имена полей с пробелами, если вы не заключите их в квадратные скобки:

[Asset Tag]
...