更新:这是SP,由于正在进行的测试,它完全不匹配,但是你得到了jist。由于测试,有些字段被注释掉了....
@tableName Varchar(150),
@new_lang_String nvarchar(max),
-- @lang_String nvarchar(max),
@ID int,
@prev_LangString nvarchar(max) = NULL,
@original_lang_String nvarchar(max) = NULL,
@brief_Descrip nvarchar(max) = NULL,
@submittedBy nvarchar(250) = NULL
AS
/* SET NOCOUNT ON */
DECLARE @lang_String varchar(max);
SET @prev_LangString = @new_lang_String;
DECLARE @submitDate1 DATETIME;
SET @submitDate1 = GETDATE();
DECLARE @sql varchar(max);
SET @lang_String = @original_lang_String;
BEGIN
SET @sql = 'UPDATE ' + @tableName + ' SET [lang_String] = ''' + COALESCE(@lang_String, NULL) + ''', [date_Changed] = ''' + convert(varchar(20), @submitDate1) + ''', [prev_LangString] = ''' + COALESCE(@prev_LangString, NULL) + ''', [brief_Descrip] = ''' + COALESCE(@brief_Descrip, NULL) + ''', [submittedBy] = ''' + @submittedBy + '''
WHERE (ID = ' + CAST(@ID as nvarchar(10)) + '); '
EXECUTE(@sql);
END
RETURN
正如您可能在代码中所说的那样,我一直在努力处理某些字段中的Null。因此,默认值inteh会在某些字段上更新=“”的参数。
我正在使用gridview来显示从SQL Express DB中的表中检索的信息。当用户单击EDIT并输入信息时,我正在尝试使用从Gridview调用的STORED PROCEDURE更新表。请参阅下面的aspx代码。
问题是正在编辑的列不会更新数据库表,除非它之前已经存储了数据,就像列IS NOT Null中的单元格一样。没有错误。
由于此列中的大多数单元格都是空的,因此不会更新任何数据。没有错误,只是没有写入表格。如果该表先前在相关列单元格中有数据,则可以成功编辑和更新。
来自ASPX页面的Gridview ....
<asp:BoundField DataField="lang_String" HeaderText="Foreign Text" SortExpression="lang_String">
<ControlStyle Width="400px"/>
</asp:BoundField>
Gridview上的Update命令调用SP,如果列/单元已经有数据......
UpdateCommand="EXEC usp_UpdatePTEdit @tableName, @lang_String=@lang_String, @ID=@original_ID, @prev_LangString=@original_lang_String, @brief_Descrip=@brief_Descrip, @submittedBy=@SubmittedBy">
传递给UpdateCommand的参数,只使用了几个......
<UpdateParameters>
<asp:SessionParameter Name="tableName" SessionField="tableName1" />
<asp:SessionParameter Name="submittedBy" SessionField="SubmittedByUser" />
<asp:Parameter Name="data_text" Type="String" />
<asp:Parameter Name="lang_String" Type="String" DefaultValue=" " />
<asp:Parameter Name="date_Changed" Type="DateTime" />
<asp:Parameter Name="prev_LangString" Type="String" DefaultValue=" " />
<asp:Parameter Name="needsTranslation" Type="String" />
<asp:Parameter Name="displayRecord" Type="String" />
<asp:Parameter Name="brief_Descrip" Type="String" DefaultValue=" " />
<asp:Parameter Name="original_ID" Type="Int32" />
<asp:Parameter Name="original_data_text" Type="String" />
<asp:Parameter Name="original_lang_String" Type="String" />
<asp:Parameter Name="original_date_Changed" Type="DateTime" />
<asp:Parameter Name="original_prev_LangString" Type="String" />
<asp:Parameter Name="original_needsTranslation" Type="String" />
<asp:Parameter Name="original_displayRecord" Type="String" />
<asp:Parameter Name="original_brief_Descrip" Type="String" />
<asp:Parameter Name="original_submittedBy" Type="String" />
</UpdateParameters>
如果单元格最初有数据“original_lang_String”,但是如果尚未填充,则一切正常,我无法使用Gridview的编辑操作成功更新表格。
任何帮助或建议都将不胜感激。
答案 0 :(得分:1)
我认为问题可能在于将参数分配给同名的列(@lang_String=@lang_String
)。我建议按照它们在存储过程中出现的顺序指定参数,并删除@ name =语法。我认为这只是让数据源或网格视图混淆。
<强>更新强>
我认为您最好将UpdateCommand更改为:
UpdateCommand="usp_UpdatePTEdit"
并添加:
UpdateCommandType="StoredProcedure"
这似乎更适合更新命令的设计方式。
答案 1 :(得分:1)
@ prev_LangString = @ original_lang_String
取决于usp_UpdatePTEdit中的内容,我敢打赌它失败了,因为某处它正在检查不存在的原始值。 NULL是特殊的,它的相等检查失败。
发布usp_UpdatePTEdit存储过程中的代码以获取更多帮助。