Ошибка при добавлении записей в базу данных SQL Server (nvarchar) - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь добавить записи в базу данных 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): имя столбца или количество предоставленных значений не соответствует определению таблицы.

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

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

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

- S

1 Ответ

0 голосов
/ 13 сентября 2018

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

Поэтому измените свою вставку на:

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

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

...