我收到此错误消息:无法将值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')
答案 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:
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作为输出变量。
谢谢。