Получение нулевого значения из выходного значения в обновленном событии sqldatasource из хранимой процедуры - PullRequest
0 голосов
/ 21 февраля 2019

Я не могу понять, почему я продолжаю получать значение NULL из хранимой процедуры ... Я делаю то же самое на вставке в другой sqldatasource, и я возвращаю scope_identity, но при обновлении яневозможно получить возвращаемое значение ...

Это хранимая процедура.Я попытался удалить set nocount на even и ничего не изменил

ALTER PROCEDURE [dbo].[sp_UPDATE_ADefinicao_Extrusao]
@RegistoID int,
@Base_Cru varchar(50),
@Linha_Cru varchar(5),
@Diametro_Cru numeric(6,2),
@Espessura_Cru numeric(6,2),
@Comprimento_Cru numeric(6,2),
@Marcacao_Continua_Cru varchar(max),
@ID int = null OUTPUT

AS
BEGIN
SET NOCOUNT ON

UPDATE RVFC_Definicao
SET [Base_Cru] = @Base_Cru, [Linha_Cru] = @Linha_Cru, [Diametro_Cru] = 
@Diametro_Cru, [Espessura_Cru] = @Espessura_Cru, 
    [Comprimento_Cru] = @Comprimento_Cru, [Marcacao_Continua_Cru] = 
@Marcacao_Continua_Cru, [Data_Registo_Extrusao] = 
CONVERT(VARCHAR,GETDATE(),105)
WHERE ID_Registo = @RegistoID

SET @ID = @RegistoID
SELECT @ID -- Update successful

END

и мой sqldatasource, я попытался установить Size для varchars, но ничего не изменилось, потому что я даже не делаю этого на вставкеодин.

          <asp:SqlDataSource
                ID="sdsADefinicao"
                runat="server"
                ConnectionString="<%$ ConnectionStrings:ValidacaoFormas_ConnectionString %>"
                UpdateCommand="sp_UPDATE_ADefinicao_Extrusao"
                UpdateCommandType="StoredProcedure"
                OnUpdated="sdsADefinicao_Updated"
                SelectCommandType="StoredProcedure"
                SelectCommand="sp_SELECT_ADefinicao">

                <SelectParameters>
                    <asp:ControlParameter ControlID="hdfRegistoID" Name="RegistoID" Type="Int32" />
                </SelectParameters>

                <UpdateParameters>
                    <asp:ControlParameter ControlID="fvADefinicao" Name="RegistoID" PropertyName="SelectedValue" Type="Int32" />
                    <asp:Parameter Name="Base_Cru" Type="String" Size="50" />
                    <asp:Parameter Name="Linha_Cru" Type="String" Size="5" />
                    <asp:Parameter Name="Diametro_Cru" Type="Decimal" />
                    <asp:Parameter Name="Espessura_Cru" Type="Decimal" />
                    <asp:Parameter Name="Comprimento_Cru" Type="Decimal" />                        
                    <asp:Parameter Name="Marcacao_Continua_Cru" Type="String"/>                                                                                                
                    <asp:Parameter Name="ID" Type="Int32" Direction="Output" />
                </UpdateParameters>
            </asp:SqlDataSource>

и код для получения значения

   protected void sdsADefinicao_Updated(object sender, SqlDataSourceStatusEventArgs e)
    {
        int registoID = Convert.ToInt32(e.Command.Parameters["@ID"].Value);

        FileUpload fuAnexo = fvADefinicao.FindControl("fuAnexo") as FileUpload;

        int numFiles = fuAnexo.PostedFiles.Count;
        int index = 0;
        Ficheiro[] files = new Ficheiro[numFiles];

        foreach (HttpPostedFile file in fuAnexo.PostedFiles)
        {
            Ficheiro anexo = new Ficheiro("HUTMATER");
            anexo.Nome = Path.GetFileName(file.FileName);
            using (Stream fs = file.InputStream)
            using (BinaryReader br = new BinaryReader(fs))
            {
                anexo.Dados = br.ReadBytes((Int32)fs.Length);
            }
            files[index] = anexo;
        }

        string piloto = SessionManager.Nome;
        Ficheiro.Upload(Convert.ToInt32(registoID), piloto, files); // Guarda anexos do formulario na base de dados            
    }

1 Ответ

0 голосов
/ 21 февраля 2019

ОК, я наконец нашел ответ.Это было непросто, все было правильно, за исключением того, что настоящее исключение было скрыто по нулевой ссылке.Кажется, по какой-то причине параметры, которые я отправлял, давали мне слишком много исключений для параметров.

@RegistoID and @ID_Registo

Однако я понятия не имею, почему, поскольку у меня никогда не было параметра @ID_Registo, это просто имя столбцав базе данных.После изменения имени параметра на @ID_Registo я смог вернуть значение из хранимой процедуры.

Если у кого-то есть такая проблема, попробуйте изменить имена параметров на те же, что и имена столбцов в базе данных

...