Gridview не обновляет таблицу, когда столбец / ячейка начинается без данных - PullRequest
0 голосов
/ 05 декабря 2011

ОБНОВЛЕНО: Вот 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

Как вы, вероятно, можете сказать из кода, я боролся с обработкой нулевого значения в некоторых полях. Следовательно, по умолчанию значения inteh обновляют параметры = "" в некоторых полях.

Я использую gridview для отображения информации, полученной из таблицы в БД SQL Express. Когда пользователь нажимает кнопку EDIT и вводит информацию, я пытаюсь обновить таблицу с помощью STORED PROCEDURE, вызываемой из Gridview. См. Ниже aspx код.

Проблема в том, что редактируемый столбец не будет обновлять таблицу БД, если в ней ранее не хранились данные, как в ячейке в столбце IS NOT Null. Нет ошибок.

Поскольку большинство ячеек в этом столбце имеют нулевое значение, данные не обновляются. Никаких ошибок, просто ничего не записано в таблицу. Если таблица ранее содержала данные в соответствующей ячейке столбца, ее можно успешно отредактировать и обновить.

Gridview со страницы ASPX ....

<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 для успешного обновления таблицы.

Буду признателен за любую помощь или предложения.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

@ prev_LangString = @ original_lang_String

В зависимости от того, что находится в usp_UpdatePTEdit, я держу пари, что это не удается, потому что где-то он проверяет исходное значение, которое не существует.Значение NULL является специальным, и проверки на равенство для него завершаются неудачей.

Отправьте код, который находится в usp_UpdatePTEdit, хранимой процедурой proc, для получения дополнительной помощи.

1 голос
/ 06 декабря 2011

Я думаю, что проблема может быть в присвоении параметров столбцу с тем же именем (@lang_String=@lang_String).Я рекомендую указывать параметры в том порядке, в котором они появляются в хранимой процедуре, и удалять синтаксис @ name =.Я думаю, что это только запутает источник данных или представление сетки.

Обновление

Я думаю, что вам было бы лучше изменить команду UpdateCommand на:

UpdateCommand="usp_UpdatePTEdit"

и добавление:

UpdateCommandType="StoredProcedure"

Похоже, это лучше подходит для работы команды обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...