2016-10-19 8 views
-2

このエラーメッセージが表示されます: 'NULL'という値を 'id'、table ''列に挿入できません。列はNULLを許可しません。 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

データベースに挿入する前にnull値を空にするだけです – Meena

答えて

0

私はそのIDがIDENTITY columnだとします。その値はデータベースエンジンによって自動的に生成され、レコードにどの値が割り当てられているかを知りたいとします。

その後、クエリのテキストは今、セミコロンで最初のコマンドから分離された第2の命令SELECT SCOPE_IDENTITY()が含まれてい

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()); 
} 

にあなたのクエリを変更する必要があります。 SCOPE_IDENTITYは、現在のスコープのデータベースエンジンによって生成された最後のIDENTITY値を返します。

今すぐコマンドが任意の出力パラメータ

0

を使用せずに、クエリのテキストに存在する最後の文で返される単一の値を取り戻すためには、ExecuteScalarを使用して実行され、私はIDがアイデンティティであると思うだろう。この値を追加する必要はありません。あなたが自動的にIDを取得したら、次のコードを試してデータベースをチェックします。以下に示すように

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(); 


     } 

私の場合は、あなたは、あなたがIDからIDを削除するデータベースのスキーマを変更する必要があり、IDを自分(デシベルからwithoud自動インクリメント)を設定したい:

enter image description here

これが役に立ったらいいですか

0

この列を空にしておく必要がある場合は、「 '(空白)」に置き換えてみてください。これは、列が "キー"

ない場合は、仕事や使用しようとします:

代替NULL値が検出された値を

NVL(文字列1、replace_with)

0

これはストアドプロシージャを使用して行うことができます。以下はCreateストアドプロシージャのスクリプトです。

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

上記のコードを使用すると、テキストボックスから日付を挿入し、最後に挿入したレコードIDを出力変数として取得することができます。

ありがとうございました。

関連する問題