2016-10-19 3 views
-2

Я получаю это сообщение об ошибке: Не удается вставить значение NULL в столбец «id», table ''; столбец не допускает нулей. INSERT терпит неудачу. заранее заблаговременноВставить значение из TextBox в sql

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; 
     } 
    } 
+0

просто обрезать нулевое значение до пустого перед вставкой в ​​базу данных – Meena

ответ

0

Я полагаю, что ID - это IDENTITY column. Его значение генерируется автоматически движком базы данных, и вы хотите знать, какое значение было присвоено вашей записи.

Затем вы должны изменить свой запрос

string insertCmd = @"INSERT INTO Picture (Album) VALUES (@Album); 
        SELECT SCOPE_IDENTITY()"; 
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strConn"].ConnectionString)) 
{ 
    conn.Open(); 
    SqlCommand myCommand = new SqlCommand(insertCmd, conn); 
    myCommand.Parameters.AddWithValue("@Album", txtAlbum.Text); 
    int newID = Convert.ToInt32(myCommand.ExecuteScalar()); 
} 

Текст запроса теперь содержит вторую инструкцию SELECT, SCOPE_IDENTITY(), отделенный от первой команды точки с запятой. SCOPE_IDENTITY возвращает последнее значение IDENTITY, сгенерированное для вас механизмом базы данных в текущей области.

Теперь команда запускается с помощью ExecuteScalar вернуть одно значение, возвращенное последним утверждением, присутствующим в тексте запроса без использования какого-либо параметра выходного

0

Я думаю, что идентификатор личности. Вам не нужно добавлять это значение. Я бы попробовал следующий код и проверил базу данных, если вы автоматически получите идентификатор.

string insertCmd = "INSERT INTO Picture (Album) VALUES (@Album)"; 
     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.ExecuteNonQuery(); 


     } 

Я случае, если вы хотите установить идентификатор самостоятельно (withoud автоматическое приращение из БД), вы должны изменить схему базы данных удаления идентичности с ID, как показано ниже:

enter image description here

Я надеюсь, что это поможет

0

Если вам нужно оставить эту колонку пустым, вы можете попробовать заменить ее на '' (пробел). Это будет работать, если вы столбец не "Key"

Или попробуйте использовать:

заменить значение, когда нулевое значение встречается

NVL (string1, replace_with)

0

Вы можете сделать это, используя хранимую процедуру. Ниже приведен скрипт для создания хранимой процедуры.

CREATE PROCEDURE [dbo].[InsertIntoPicture] 
    @Album varchar(500)=null, 
    @id int=0 output 
AS 
BEGIN 
    insert INTO Picture(Album)VALUES(@Album) 
    SET @[email protected]@IDENTITY 
END 

Ниже приведен код хранимой процедуры вызова с использованием C#.

string insertCmd = "InsertIntoPicture"; 
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["strConn"].ConnectionString)) 
    { 
    conn.Open(); 
    SqlCommand myCommand = new SqlCommand(insertCmd, conn); 
    myCommand.CommandType = CommandType.StoredProcedure; 
    myCommand.Parameters.AddWithValue("@Album", txtAlbum.Text); 
    myCommand.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output; 
    myCommand.ExecuteNonQuery(); 

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

Используя выше код вы можете вставить дату в TextBox, а также получить последний вставленный идентификатор записи в качестве выходной переменной в соответствии с вашими требованиями.

Спасибо.

Смежные вопросы