不显示删除回复显示所有回复显示星级回复显示得分回复 列不允许有空值。INSERT 失败的问题

lishan_77 2011-05-18 02:44:11
建立了一个存储过程:ALTER PROCEDURE [dbo].employeeInsert
@em_id int OUTPUT,
@name varchar(50),
@u_id int,
@dep_id int,
@gend int,
@birth datetime,
@mar int,
@native varchar(50),
@na_id int,
@hukou varchar(50),
@v_id int,
@idcard varchar(50),
@health varchar(50),
@phone varchar(50),
@mob varchar(50),
@mail varchar(50),
@school varchar(50),
@spec varchar(50),
@learn varchar(50),
@degree varchar(50),
@language varchar(50),
@lanlevel varchar(50),
@com varchar(50),
@comgood varchar(50),
@address varchar(50),
@em_add varchar(50),
@workdate datetime,
@regtime datetime,
@regper varchar(50),
@photo varchar(50)
AS
SET NOCOUNT ON
insert into employee
(
[em_id],
[name],
[u_id],
[dep_id],
[gend],
[birth],
[mar],
[native],
[na_id],
[hukou],
[v_id],
[idcard],
[health],
[phone],
[mob],
[mail],
[school],
[spec],
[learn],
[degree],
[language],
[lanlevel],
[com],
[comgood],
[address],
[em_add],
[workdate],
[regtime],
[regper],
[photo]
)
values
(
@em_id,
@name,
@u_id,
@dep_id,
@gend,
@birth,
@mar,
@native,
@na_id,
@hukou,
@v_id,
@idcard,
@health,
@phone,
@mob,
@mail,
@school,
@spec,
@learn,
@degree,
@language,
@lanlevel,
@com,
@comgood,
@address,
@em_add,
@workdate,
@regtime,
@regper,
@photo
)set @em_id=scope_identity()
return @@error

表enployee的主键是em_id ,标识设置为否
用 retval = cmd.ExecuteNonQuery();操作数据库
检查了下cmd属性,connection, (commandType, commandText都正常,commandParameters中各个item都有值
但是执行的时候,报错:不能将值 NULL 插入列 'em_id',表 'OA_DB.dbo.employee';列不允许有空值。INSERT 失败。
语句已终止。
cmd.parameters里面@em_id是有值的,
请问怎么回事啊。

上程序:
public int Insert(employee employee)
{
string sqlCommand = "employeeInsert";
int res;
SqlParameter[] param ={
new SqlParameter("@em_id",SqlDbType.Int),
new SqlParameter("@name",SqlDbType.VarChar),
new SqlParameter("@u_id", SqlDbType.Int),
new SqlParameter("@dep_id",SqlDbType.Int),
new SqlParameter("@gend",SqlDbType.Int),
new SqlParameter("@birth",SqlDbType.DateTime),
new SqlParameter("@mar",SqlDbType.Int),
new SqlParameter("@native",SqlDbType.VarChar),
new SqlParameter("@na_id",SqlDbType.Int),
new SqlParameter("@hukou",SqlDbType.VarChar),
new SqlParameter("@v_id",SqlDbType.Int),
new SqlParameter("@idcard",SqlDbType.VarChar),
new SqlParameter("@health",SqlDbType.VarChar),
new SqlParameter("@phone",SqlDbType.VarChar),
new SqlParameter("@mob",SqlDbType.VarChar),
new SqlParameter("@mail",SqlDbType.VarChar),
new SqlParameter("@school",SqlDbType.VarChar),
new SqlParameter("@spec",SqlDbType.VarChar),
new SqlParameter("@learn",SqlDbType.VarChar),
new SqlParameter("@degree",SqlDbType.VarChar),
new SqlParameter("@language",SqlDbType.VarChar),
new SqlParameter("@lanlevel",SqlDbType.VarChar),
new SqlParameter("@com",SqlDbType.VarChar),
new SqlParameter("@comgood",SqlDbType.VarChar),
new SqlParameter("@address",SqlDbType.VarChar),
new SqlParameter("@em_add",SqlDbType.VarChar),
new SqlParameter("@workdate",SqlDbType.DateTime),
new SqlParameter("@regtime",SqlDbType.DateTime),
new SqlParameter("@regper",SqlDbType.VarChar),
new SqlParameter("@photo",SqlDbType.VarChar)
};
param[0].Direction = ParameterDirection.Output;
param[0].Value = employee.em_id;
param[1].Value = employee.name;
param[2].Value = employee.u_id;
param[3].Value = employee.dep_id;
param[4].Value = employee.gend;
param[5].Value = employee.birth;
param[6].Value = employee.mar;
param[7].Value = employee.native;
param[8].Value = employee.na_id; ;
param[9].Value = employee.hukou;
param[10].Value = employee.v_id;
param[11].Value = employee.idcard;
param[12].Value = employee.health;
param[13].Value = employee.phone; ;
param[14].Value = employee.mob;
param[15].Value = employee.mail;
param[16].Value = employee.school;
param[17].Value = employee.spec;
param[18].Value = employee.learn;
param[19].Value = employee.degree;
param[20].Value = employee.language;
param[21].Value = employee.lanlevel;
param[22].Value = employee.com;
param[23].Value = employee.comgood;
param[24].Value = employee.address;
param[25].Value = employee.em_add;
param[26].Value = employee.workdate;
param[27].Value = employee.regtime;
param[28].Value = employee.regper;
param[29].Value = employee.photo;

res = SqlHelper.ExecuteNonQuery(Conn.SqlConn, CommandType.StoredProcedure, sqlCommand, param);
return res;
}

public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
//create a command and prepare it for execution
SqlCommand cmd = new SqlCommand();
PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters);

//finally, execute the command.
int retval;
try
{
retval = cmd.ExecuteNonQuery();
}
catch
{
throw;
}

// detach the SqlParameters from the command object, so they can be used again.
cmd.Parameters.Clear();
return retval;
}
...全文
166 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishan_77 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kongwei521 的回复:]
param[0].Direction = ParameterDirection.Output;
//Output 参数是输出参数。
把这句去掉。或者改成Input
Input是传递进去的值,调用者给被调用的过程用,Output是传出 的值,被调用者返回给调用者的值
[/Quote]
感觉这个是正解,以前作为标识列的时候用到这个,现在取消标识列后,因为这个影响到了值的插入
我试验下,正确的话就给分呵呵
蝶恋花雨 2011-05-18
  • 打赏
  • 举报
回复
param[0].Direction = ParameterDirection.Output;
//Output 参数是输出参数。
把这句去掉。或者改成Input
Input是传递进去的值,调用者给被调用的过程用,Output是传出 的值,被调用者返回给调用者的值
lishan_77 2011-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kongwei521 的回复:]
不能将值 NULL 插入列 'em_id'
把em_id字段设置为自动增长的。
[/Quote]
本来是设置成自增的,而且在存储过程中是不给em_id加值的,后来因为需求的需要要自己填这个id,所以取消了em_id字段的标识,然后在程序和存储过程中都对em_id赋值
蝶恋花雨 2011-05-18
  • 打赏
  • 举报
回复
建立了一个存储过程:ALTER PROCEDURE [dbo].employeeInsert
@em_id int OUTPUT

param[0].Direction = ParameterDirection.Output;
param[0].Value = employee.em_id;
重点查看这几处。
woying5510 2011-05-18
  • 打赏
  • 举报
回复
主键不是标识你弄个output干什么
woying5510 2011-05-18
  • 打赏
  • 举报
回复
头晕了,参数太多了
蝶恋花雨 2011-05-18
  • 打赏
  • 举报
回复
不能将值 NULL 插入列 'em_id'
把em_id字段设置为自动增长的。

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧