Member 12802669 Ответов: 2

Вставить значение из текстового поля в SQL-error


получите следующее сообщение об ошибке: не удается вставить значение NULL в столбец 'id', таблица"; столбец не допускает значений null. Вставить не удается. заранее спасибо
protected void AddItem(object sender, EventArgs e) {
        string insertCmd = "INSERT INTO Picture (Album, id) VALUES (@Album, @id)";
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strConn"].ConnectionString))
        {
            conn.Open();
            SqlCommand myCommand = new SqlCommand(insertCmd, conn);
            // Create parameters for the SqlCommand object
            // initialize with input-form field values
            myCommand.Parameters.AddWithValue("@Album", txtAlbum.Text);
            myCommand.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output;
            myCommand.ExecuteNonQuery();

            int id = (int)myCommand.Parameters["@id"].Value;
        }
    }


Что я уже пробовал:

myCommand.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output;

NotPolitcallyCorrect

Сообщение об ошибке довольно ясно показывает, в чем проблема. Где вы устанавливаете значение параметра id, который будет вставлен в вашу базу данных?

2 Ответов

Рейтинг:
2

Wendelius

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

Но если вы действительно пытаетесь использовать автоматически сгенерированное значение для строки, то вам следует убедиться, что таблица имеет свойство Identity)[^] определено для столбца Id. Таким образом, столбец автоматически получит уникальное значение при вставке строки. В этом случае, если вам нужно получить вновь вставленное значение в качестве выходного параметра из инструкции INSERT, вы изменяете инструкцию таким образом, чтобы она включала предложение Output[^]. Например

string insertCmd = "INSERT INTO Picture (Album, id) OUTPUT inserted.Id VALUES (@Album)";
...
int value = myCommand.ExecuteScalar();


Рейтинг:
0

OriginalGriff

Вы не можете установить @ID в качестве выходного параметра в команде INSERT - это значение, которое вам нужно установить, а не что-то, что может быть возвращено, и INSERT всегда возвращает только количество затронутых строк.
Установите значение @ID таким же образом, как и значение параметров @ALBUM.