Нулевая ошибка в WinForm Combobox - PullRequest
1 голос
/ 27 января 2012

Я использую WinForms и MySQL в своем проекте.

Моя структура таблицы ...

enter image description here

В моем проекте у меня есть три поля со списком и один TextBox. «Опция» ComboBox содержит три значения:

  1. Город
  2. Государство
  3. Страна

Когда я выбираю комбинированные списки города, штата и страны, необходимо выбрать их.

enter image description here

Когда я выбираю штат, необходимо выбрать комбинированные списки стран.

enter image description here

Когда я выбираю страну, нет необходимости выбирать комбинированные списки штата и страны.

enter image description here

Я пытался вставить эти данные с этим кодом:

MySqlConnection connection = new MySqlConnection("server=192.168.1.100;User Id=mcubic;password=mcs@2011$;database=mcs;Persist Security Info=True");
MySqlCommand command = new MySqlCommand("Insert into test (name1,option1,state,country) VALUES ('" + textBox1.Text + "','" + cmbo_Options.SelectedItem.ToString() + "','" + cmbo_state.SelectedItem.ToString() + "','" + cmbo_country.SelectedItem.ToString() + "')", connection);
connection.Open();
command.ExecuteNonQuery();
connection.Close();

Когда все ComboBoxы выбраны, этот код работал правильно. Но когда ComboBox State не выбран, он генерирует исключение NullReferenceException.

Ссылка на объект не установлена ​​для экземпляра объекта. Нулевая ошибка.

Итак, я обновил свой код:

string country = cmbo_country.SelectedItem.ToString();
string state = cmbo_state.SelectedItem.ToString();
MySqlConnection connection = new MySqlConnection("server=192.168.1.100;User Id=mcubic;password=mcs@2011$;database=mcs;Persist Security Info=True");
MySqlCommand command = new MySqlCommand("Insert into test (name1,option1,state,country) VALUES ('" + textBox1.Text + "','" + cmbo_Options.SelectedItem.ToString() + "','" + state + "','" + country + "')", connection);
connection.Open();
command.ExecuteNonQuery();
connection.Close();

Я не могу избежать этой ошибки. Каким должен быть мой код для этого проекта?

Ответы [ 4 ]

2 голосов
/ 27 января 2012

У меня есть простой способ,

 string country ="";
if(cmbo_country.SelectedItem != null)
country = cmbo_country.SelectedItem.ToString();
    string state = "";
if(cmbo_state.SelectedItem !=null)
state = cmbo_state.SelectedItem.ToString();
    MySqlConnection connection = new MySqlConnection("server=192.168.1.100;User Id=mcubic;password=mcs@2011$;database=mcs;Persist Security Info=True");
    MySqlCommand command = new MySqlCommand("Insert into test (name1,option1,state,country) VALUES ('" + textBox1.Text + "','" + cmbo_Options.SelectedItem.ToString() + "','" + state + "','" + country + "')", connection);
    connection.Open();
    command.ExecuteNonQuery();
    connection.Close();

В этом вам не нужна попытка поймать, ..

0 голосов
/ 27 января 2012

Попробуйте добавить в выпадающий список выбранный код элемента, ..

 try
    {
        string country = cmbo_country.SelectedItem.ToString();
                string state = cmbo_state.SelectedItem.ToString();

    }
    catch
    {

    }

Извините за это,

Вы можете попробовать это

try
{
    string country = cmbo_country.SelectedItem.ToString();           
}
catch{}

try
{       
    string state = cmbo_state.SelectedItem.ToString();

}
catch{}

Теперьэтот код выполняет ваши требования.ок?

0 голосов
/ 27 января 2012

Вам необходимо изменить оператор вставки, чтобы не вставлять в столбец state, если он пуст:

Один простой способ сделать это - просто добавить оператор if:

string sql;
if (cmbo_State.SelectedItem == null)
{
    sql = string.Format("Insert into test (name1,option1,country) 
        Values ('{0}','{1}','{2}')", textBox1.Text, 
        cmbo_Options.SelectedItem.ToString(), cmbo_country.SelectedItem.ToString());
}
else
{
    sql = string.Format("Insert into test (name1,option1,state,country) 
        Values ('{0}','{1}','{2}','{3}')", textBox1.Text, 
        cmbo_Options.SelectedItem.ToString(), cmbo_state.SelectedItem.ToString()
        cmbo_country.SelectedItem.ToString());
}
0 голосов
/ 27 января 2012

Попробуйте cmbo_country.Text

Самым простым решением было бы использование SWITCH в вашем коде.

Вот простой Psuedocode для вашего приложения.

MySqlCommand command;
switch (cmbo_country.Text)
{
    case "City":
    {
       command = new MySqlCommand("Insert into test (name1,option1,state,country) VALUES ('','','','')");
       break;
    }
    case "State":
    {
       command = new MySqlCommand("Insert into test (name1,option1,country) VALUES ('','','')");
       break;
    }
    case "Country":
    {
       command = new MySqlCommand("Insert into test (name1,option1) VALUES ('','')");
       break;
    }
    default:
       // prompt the user to select an option.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...