Ошибка при добавлении записей в базу данных sql server (nvarchar)

Я пытаюсь добавить записи в базу данных SQL Server. Соединение отлично работает с любой другой таблицей, кроме одной.

Это мой код:

private void saveCurrent()
{
    try
    // Save entry into the database.
    {
        string query = "INSERT INTO entries VALUES (@Date, @Tags, @Entry, @User)";

        using (connection = new SqlConnection(connectionString))
        using (SqlCommand command = new SqlCommand(query, connection))
        {
            connection.Open();

            command.Parameters.AddWithValue("@Date", System.DateTime.Now.ToLongDateString());
            command.Parameters.AddWithValue("@Tags", txtTags.Text);
            command.Parameters.AddWithValue("@Entry", richEntryBox.Text);
            command.Parameters.AddWithValue("@User", Form1.userName);

            command.ExecuteNonQuery();

            isDirty = false;
        }
    }
    catch (Exception exception)
    {
        MessageBox.Show("There was an error saving this entry:  " + exception.ToString());
    }

Ошибка:

System.Data.SqlClient.SqlException (0x8-131904): Column name or number of supplied values does not match table definition.

Все столбцы относятся к типу nvarchar(50) и nvarchar(MAX). Я пытаюсь ввести только текстовую информацию, а не двоичные файлы. Набор данных показывает, что в таблице есть столбец «фотографии», но он может быть пустым, и я его не использую (по какой-то причине я не могу заставить VS2017 удалить этот столбец). Я изменил набор данных, чтобы не включать поле «фотографии», но все равно получаю сообщение об ошибке. Любой толчок к решению будет оценен. Сюда включен снимок набора данных.

Мой набор данных, в котором я удалил столбец фотографий:

my dataset, in which I've removed the photos column

--S

Мне кажется, что первый столбец имеет тип DATE, не так ли? Но значение, которое вы пытаетесь вставить, - это «Строка». Это не работает.

The Impaler 13.09.2018 19:41

пробовали ли вы указать тип данных для рассматриваемого поля ... проблема с "Addwithvalue" в том, что он пытается угадать ваш тип данных

Ctznkane525 13.09.2018 19:41

Собственно, каковы типы столбцов каждого столбца таблицы?

The Impaler 13.09.2018 19:42

Есть какой-нибудь триггер?

jarlh 13.09.2018 19:43

Поле «дата» не является стандартной датой, оно является настраиваемым и является текстовым. Я указал, что все поля в таблице имеют тип nvarchar - вы это имеете в виду? Триггер не задействован.

Sintrigue Sintrigue 13.09.2018 20:02
0
5
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если в вашей базе данных все еще есть поле photos, вам необходимо явно указать столбцы для вставки.

Так что измените вставку на:

string query = "INSERT INTO entries (date, tags, entry, user) VALUES (@Date, @Tags, @Entry, @User)";

В общем, вы хотите, чтобы ваши вставки были явными. Что произойдет, если кто-то добавит столбец после тегов и перед записью в базу данных? Это нарушит ваш код.

Спасибо - это помогло мне продвинуться дальше. Я изменил запрос, чтобы он соответствовал тому, что вы указали, с явными полями для вставки. Как ни странно, теперь я получаю сообщение об ошибке «Неправильный синтаксис рядом с ключевым словом« пользователь ».

Sintrigue Sintrigue 13.09.2018 20:01

Спасибо! У меня там была странная орфография. Получил это исправлено, использовал ваше предложение, чтобы явно добавить поля, наконец, удалось удалить поле фотографий из БД, и он отлично работает. Очень признателен!

Sintrigue Sintrigue 13.09.2018 20:21

Рад, что смог помочь!

Michael 13.09.2018 20:22

Другие вопросы по теме