System.Data.SqlClient.SqlException: «Ошибка преобразования при преобразовании значения nvarchar в тип данных int». - PullRequest
0 голосов
/ 04 августа 2020

Я создал базу данных, и я пытаюсь выполнить INSERT INTO TABLE с помощью следующего кода:

string sqlquery = "INSERT INTO Runner VALUES (@firstName, @lastName, @amount, @category, @city, @charity, @route)";
cmd = new SqlCommand(sqlquery, conn);

conn.Open();

cmd.Parameters.AddWithValue("@firstName", txtFirstName.Text.ToString());
cmd.Parameters.AddWithValue("@lastName", txtLastName.Text.ToString());
cmd.Parameters.AddWithValue("@amount", Convert.ToInt32(txtMoney.Text));
cmd.Parameters.AddWithValue("@category", cbBoxCategory.ValueMember);
cmd.Parameters.AddWithValue("@city", cbBoxCity.ValueMember);
cmd.Parameters.AddWithValue("@charity", cbBoxCharity.ValueMember);
cmd.Parameters.AddWithValue("@route", cbBoxRoute.ValueMember);

cmd.ExecuteNonQuery();
conn.Close();

Когда я запускаю его, я получаю эту ошибку:

Система .Data.SqlClient.SqlException: 'Ошибка преобразования при преобразовании значения nvarchar' id 'в тип данных int.'

Все мои cbBox (comboBox) должны оставить INT, я поймите, что нужно преобразовать в NVARCHAR в INT, я пытаюсь использовать Convert.Into32(cbBox.Category.ValueMember), но безуспешно.

Я пробовал все безуспешно.

1 Ответ

1 голос
/ 04 августа 2020

После поиска ответов других людей я нашел это решение.

string sqlquery = "INSERT INTO Runner (firstName, lastName, amount, categoryID, cityID, charityID, routeID) VALUES (@firstName, @lastName, @amount, @category, @city, @charity, @route)";
cmd = new SqlCommand(sqlquery, conn);
conn.Open();
cmd.Parameters.Add("@firstName", SqlDbType.VarChar, 50).Value =  txtFirstName.Text;
cmd.Parameters.Add("@lastName", SqlDbType.VarChar, 50).Value = txtLastName.Text;
cmd.Parameters.Add("@amount", SqlDbType.Int).Value = txtMoney.Text;
cmd.Parameters.Add("@category", SqlDbType.Int).Value = cbBoxCategory.SelectedValue;
cmd.Parameters.Add("@city", SqlDbType.Int).Value = cbBoxCity.SelectedValue;
cmd.Parameters.Add("@charity", SqlDbType.Int).Value = cbBoxCharity.SelectedValue;
cmd.Parameters.Add("@route", SqlDbType.Int).Value = cbBoxRoute.SelectedValue;
cmd.ExecuteNonQuery();
MessageBox.Show("New Runner has been registered!");
conn.Close();

Используя Convert.ToInt32(cbBoxRoute.SelectedValue)

Вот ссылка, по которой я нахожу свое решение:

Вставить идентификатор в SQL из C# Поле со списком

...