【问题标题】:Gridview not updating table when column/cell starts with no data当列/单元格开始时没有数据时,Gridview 不更新表
【发布时间】:2011-12-05 19:14:51
【问题描述】:

更新:这是 SP,由于正在进行的测试,它不完全匹配,但你明白了。有些字段因为测试被注释掉了....

     @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。因此,某些字段上的默认值会更新 = " " 的参数。

我正在使用网格视图来显示从 SQL Express DB 中的表中检索到的信息。当用户单击 EDIT 并输入信息时,我正在尝试使用从 Gridview 调用的 STORED PROCEDURE 更新表。请参阅下面的 aspx 代码。

问题是正在编辑的列不会更新数据库表,除非它以前存储了数据,如列中的单元格不是空的。没有错误。

由于此列中的大多数单元格一开始都是 Null,因此不会更新任何数据。没有错误,只是没有写入表。如果表格之前在相关列单元格中有数据,则可以成功对其进行编辑和更新。

来自 ASPX 页面的 Gridview....

<asp:BoundField DataField="lang_String" HeaderText="Foreign Text"                 SortExpression="lang_String"> 
<ControlStyle Width="400px"/> 
</asp:BoundField> 

Gridview 上的更新命令调用 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 的编辑操作成功更新表格。

任何帮助或建议将不胜感激。

【问题讨论】:

    标签: asp.net vb.net gridview


    【解决方案1】:

    @prev_LangString=@original_lang_String

    根据 usp_UpdatePTEdit 中的内容,我敢打赌它失败了,因为它在某处检查不存在的原始值。 NULL 是特殊的,它的相等性检查失败。

    发布 usp_UpdatePTEdit 存储过程中的代码以获得更多帮助。

    【讨论】:

      【解决方案2】:

      我认为问题可能在于将参数分配给同名列(@lang_String=@lang_String)。我建议按照它们在存储过程中出现的顺序指定参数并删除 @name= 语法。我认为这只会混淆数据源或网格视图。

      更新

      我认为您最好将 UpdateCommand 更改为:

      UpdateCommand="usp_UpdatePTEdit"
      

      并添加:

      UpdateCommandType="StoredProcedure"
      

      这似乎更适合更新命令的工作方式。

      【讨论】:

      • 我的参数指定的顺序与 proc 中的顺序相同。不确定您使用 @name=syntax 引用什么?代码你更具体吗?谢谢。
      • 对不起,我认为@lang_String=@lang_String 可能会混淆处理器。如果以正确的顺序指定参数,请尝试将其更改为 @lang_string@parameter_name = @parameter_name 的所有出现都是我得到的)。
      • 此语法来自 Microsoft。
      • @marc11h:我查看了一些关于 UpdateCommand 的文档,并用不同的建议更新了我的答案。
      • 感谢您的回复。我实际上尝试过,我认为是来自 4GuysfromRollla 的教程,实际上报告了 UpdateCommandType="StoredProcedure" 的错误,并声明它需要说“文本”才能正常工作。我仍会测试您的建议,以防出现纠正此行为的修复程序或补丁。
      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多