尝试使用存储过程插入行,并将参数绑定到表达式

时间:2010-03-08 19:58:31

标签: sql sql-server stored-procedures parameters asp.net-3.5

环境: asp.net 3.5(C#和VB),Ms-sql server 2005 express

表:tableUser ID(主键) 用户名

表:userSchedule ID(主键) thecreator(foreign key = tableUser.ID) 其他领域

我创建了一个接受参数用户名并获取用户ID并在表中插入一行的过程:userSchedule

问题: 使用带有datalist控件的存储过程只通过使用下面的语句传递当前用户名来从数据库中获取数据工作正常

protected void SqlDataSourceGetUserID_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters["@CurrentUserName"].Value = Context.User.Identity.Name; 
    }

但是使用DetailsView插入时会显示错误

Procedure or function OASNewSchedule has too many arguments specified. 

我确实使用了

protected void SqlDataSourceCreateNewSchedule_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters["@CreatedBy"].Value = Context.User.Identity.Name;
    }

DetailsView属性: autogen fields:off, 默认模式:插入, 它显示了过程中可能不期望的所有字段,如过程和CreatedBy(用户ID)字段中不需要的ID(主键)。

所以我尝试从detailsview中删除2个字段并显示错误

Cannot insert the value NULL into column 'CreatedBy', table 'D:\OAS\OAS\APP_DATA\ASPNETDB.MDF.dbo.OASTest'; column does not allow nulls. INSERT fails. The statement has been terminated.

由于某些原因,未设置参数值。

任何人都可以理解这一点并提供帮助吗?

1 个答案:

答案 0 :(得分:0)

好的我的错误,我不知道代表团是如何工作的以及它是什么。 而不是SqlDataSourceCreateNewSchedule_Selecting(....)我应该使用SqlDataSourceCreateNewSchedule_Inserting来修改参数,所有需要的是在插入不选择时设置参数。