将TextBox中的值插入到sql中

时间:2016-10-19 13:23:14

标签: c# sql textbox

我收到此错误消息:无法将值NULL插入列' id',table'&#39 ;;列不允许空值。 INSERT失败。提前谢谢

SELECT command, percent_complete,total_elapsed_time, estimated_completion_time, start_time
  FROM sys.dm_exec_requests
  WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE') 

4 个答案:

答案 0 :(得分: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运行命令以获取查询文本中存在的最后一个语句返回的单个值,而不使用任何输出参数

答案 1 :(得分:0)

I would think that ID is identity. You don't have to add this value. I would try the following code and check the database if you get automatically an 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();


        }

I case you want to set the id yourself(withoud automatic increment from the db), you should change the schema of the database removing identity from ID as shown below:

enter image description here

I hope this helps

答案 2 :(得分:0)

如果您需要将此列保持为空,则可以尝试替换为' '(空白)。如果您的列不是" "

,这将有效

或尝试使用:

在遇到空值时替换值

NVL(string1,replace_with)

答案 3 :(得分:0)

您可以使用存储过程执行此操作。下面是创建存储过程的脚本。

CREATE PROCEDURE [dbo].[InsertIntoPicture]  
  @Album varchar(500)=null,
  @id int=0 output
AS
BEGIN
  insert INTO Picture(Album)VALUES(@Album)
  SET @id=@@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插入日期,并根据您的要求将最后插入的记录ID作为输出变量。

谢谢。