Вставьте оператор в базу данных SQL Server

1

Я разрабатываю веб-приложение ASP.NET MVC с помощью SQL Server.

Я пытаюсь ВСТАВИТЬ новую запись в мою базу данных, и я не понимаю, что я делаю неправильно.

Я получаю исключение в строке:

command.ExecuteNonQuery();

Код:

try
            {
                SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=UniversityManager;Integrated Security=True");

                using (connection)
                {
                    //SqlCommand command = new SqlCommand(
                    //    "INSERT INTO Students VALUES(@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp);",
                    //    connection);
                    connection.Open();
                    String sql = "INSERT INTO Students(Id,Name,Surname,Year,PhoneNumber,Cnp) " +
                        "VALUES (@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp)";
                    SqlCommand command = new SqlCommand(sql, connection);
                    command.Parameters.Add("@Id", SqlDbType.Int);
                    command.Parameters["@Id"].Value = 5;

                    command.Parameters.Add("@Name", SqlDbType.VarChar);
                    command.Parameters["@Name"].Value = collection.Name;

                    command.Parameters.Add("@Surname", SqlDbType.VarChar);
                    command.Parameters["@Surname"].Value = collection.Surname;

                    command.Parameters.Add("@Year", SqlDbType.Int);
                    command.Parameters["@Year"].Value = collection.Year;

                    command.Parameters.Add("@PhoneNumber", SqlDbType.VarChar);
                    command.Parameters["@PhoneNumber"].Value = collection.PhoneNumber;

                    command.Parameters.Add("@Cnp", SqlDbType.VarChar);
                    command.Parameters["@Cnp"].Value = collection.Cnp;

                    command.ExecuteNonQuery();
                    connection.Close();
                }

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

Спасибо!

Теги:
sql-server
insert

2 ответа

2
Лучший ответ

YEAR - зарезервированное ключевое слово для Sql Server. Итак, если у вас действительно есть столбец с этим именем, тогда вам нужно заключить его в квадратные скобки каждый раз, когда вы ссылаетесь на него. Лучше измените это имя

 String sql = "INSERT INTO Students(Id,Name,Surname,[Year],PhoneNumber,Cnp) " +
              "VALUES (@Id, @Name, @Surname, @Year, @PhoneNumber, @Cnp)";

Другая возможность - столбец Id. Если этот столбец имеет свойство IDENTITY равное true, то вы не должны устанавливать для него значение. Он автоматически рассчитывается механизмом базы данных.

Если вы посмотрите на сообщение innerexception, кажется, проблема связана с тем, что один или несколько параметров содержат больше текста, чем разрешено размером поля базы данных.
Вы можете попробовать что-то вроде этого (для каждого параметра varchar)

 // Assuming the Name field is defined as varchar(15)
 command.Parameters.Add("@Name", SqlDbType.VarChar, 15);
 command.Parameters["@Name"].Value = collection.Name;
  • 0
    Я использовал [], но он все еще не работает.
  • 0
    Попробуйте также прочитать сообщение в свойстве InnerException основного исключения
Показать ещё 13 комментариев
1

String or binary data would be truncated исключение означает, что вы пытаетесь вставить значение, которое слишком велико для одного из столбцов в таблице Student. Например, поле " Name имеет максимальную длину 10, но вы пытаетесь вставить 15-значное имя.

Проверьте значения, которые вы вставляете, и посмотрите, слишком ли они для столбцов.

  • 0
    я получаю это сейчас: Exception: Caught: «Невозможно вставить значение NULL в столбец« Id », таблица« UniversityManager.dbo.Students »; столбец не допускает нулевые значения. INSERT завершается ошибкой. Оператор завершен.» (System.Data.SqlClient.SqlException) Обнаружено System.Data.SqlClient.SqlException: «Невозможно вставить значение NULL в столбец« Id », таблица« UniversityManager.dbo.Students »; столбец не допускает нулевые значения. Ошибка INSERT. Заявление было прекращено." Время: 24.05.2014 22:55:24 Тема: Работник

Ещё вопросы

Сообщество Overcoder
Наверх
Меню