Stored procedure errore mai visto

lunedì 19 gennaio 2009 - 14.18

augusto890 Profilo | Junior Member

ciao ragazzi, sto creando una stored che mi permetta di protocollare le mail inviate in un'azienda...
mi appare un errore direi impossibile..che anche ricercandolo non lo ha mai riscontrato nessuno...l'errore è questo:

Errore server nell'applicazione '/pubblica'.
--------------------------------------------------------------------------------

String[9]: la proprietà Size ha una dimensione 0 non valida.
Descrizione: Eccezione non gestita durante l'esecuzione della richiesta Web corrente. Per ulteriori informazioni sull'errore e sul suo punto di origine nel codice, vedere l'analisi dello stack.

Dettagli eccezione: System.InvalidOperationException: String[9]: la proprietà Size ha una dimensione 0 non valida.

Errore nel codice sorgente:


Riga 4355: param.Direction = ParameterDirection.Output
Riga 4356:
Riga 4357: comando.ExecuteNonQuery()
Riga 4358:
Riga 4359: FE_inserisci_protocollo = param.Value


File di origine: c:\inetpub\wwwroot\pubblica\App_Code\classe_interventi.vb Riga: 4357

Analisi dello stack:


[InvalidOperationException: String[9]: la proprietà Size ha una dimensione 0 non valida.]
System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc) +774343
System.Data.SqlClient.SqlCommand.SetUpRPCParameters(_SqlRPC rpc, Int32 startCount, Boolean inSchema, SqlParameterCollection parameters) +120
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +1005
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +132
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +149
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +135
classe_groupware.protocollo.FE_inserisci_protocollo(String data, Int32 divisione, Int32 reparto, Int32 tipologia, String mittente, String note, String scelta, Int32 id_utente) in c:\inetpub\wwwroot\pubblica\App_Code\classe_interventi.vb:4357
ASP.protocollo_ins_prot_aspx.inserisci_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\pubblica\protocollo\ins_prot.aspx:100
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746




--------------------------------------------------------------------------------
Informazioni di versione: Versione di Microsoft .NET Framework:2.0.50727.1433; Versione di ASP.NET:2.0.50727.1433

e il codice che lo genera è:

-- ================================================ -- Template generated from Template Explorer using: -- Create Procedure (New Menu).SQL -- -- Use the Specify Values for Template Parameters -- command (Ctrl-Shift-M) to fill in the parameter -- values below. -- -- This block of comments will not be included in -- the definition of the procedure. -- ================================================ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= alter PROCEDURE FE_ins_protocollo @data varchar(20)='', @divisione int=0, @reparto int=0, @tipologia int=0, @mittente varchar(100)='', @note varchar(MAX)='', @scelta int=0, @id_utente int=0, @stringa varchar(20) out as declare @divisione_nome varchar(2) declare @reparto_nome varchar(2) declare @protocollo_nome varchar(30) declare @id_protocollo int declare @anno varchar(2) declare @protocollo_id varchar(20) set @stringa='' BEGIN select @divisione_nome = sigla_divisione from CC_divisioni where id_cc_divisioni = @divisione set @stringa = @stringa + @divisione_nome select @reparto_nome = nome_reparto from cc_reparto where id_cc_reparto = @reparto set @stringa = @stringa + @reparto_nome select @protocollo_nome = protocollo from utenti where id_utenti = @id_utente set @stringa = @stringa + @protocollo_nome if @scelta=1 begin select top(1) @id_protocollo=id from protocolloin order by id desc end else begin select top(1) @id_protocollo=id from protocollo order by id desc end set @id_protocollo = @id_protocollo + 1 if @id_protocollo < 10 begin set @protocollo_id= '00000' + cast(@id_protocollo as varchar) end else if @id_protocollo < 100 begin set @protocollo_id= '0000' + cast(@id_protocollo as varchar) end else if @id_protocollo < 1000 begin set @protocollo_id= '000' + cast(@id_protocollo as varchar) end else if @id_protocollo < 10000 begin set @protocollo_id= '00' + cast(@id_protocollo as varchar) end else if @id_protocollo < 100000 begin set @protocollo_id= '0' + cast(@id_protocollo as varchar) end else begin set @protocollo_id= cast(@id_protocollo as varchar) end set @stringa = @stringa + @protocollo_id declare @dataodierna as smalldatetime set @dataodierna=getdate() set @anno = right(cast (year(@dataodierna) as varchar),2) set @stringa=@stringa + @anno if @scelta=1 begin set @stringa = @stringa + 'E' end else begin set @stringa = @stringa + 'U' end if @scelta = 1 begin insert into protocolloin ( id_protocollo, id_utente, id_reparto, datains, dataric, mittente, id_corrispondenza, note, stato, datamod ) values ( @stringa, @id_utente, @divisione, getdate(), @data, @mittente, @tipologia, @note, 'N', NULL ) end else begin insert into protocollo ( id_protocollo, id_reparto, id_utente, datains, datainv, destinatario, id_corrispondenza, note, stato, datamod, datastato ) values ( @stringa, @divisione, @id_utente, getdate(), @data, @mittente, @tipologia, @note, 'N', NULL, NULL ) end END GO
sapete darmi una mano? sono disperato!!! help me!!1

alx_81 Profilo | Guru

>ciao ragazzi,
Ciao!

sinceramente con la sola stored procedure senza i dati faccio fatica..
Postami le tabelle, magari popolate con qualche record (le CREATE e le INSERT), poi provo la stored procedure.

>sapete darmi una mano? sono disperato!!! help me!!1
Quell'errore sembra proprio un errore dato da una funzione che si aspetta un parametro che non sia 0.. tipo la right..
prova altrimenti a fare dei test passo passo con la PRINT.


--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

augusto890 Profilo | Junior Member

la stored lato server...ovvero su sql...funziona...mentre lato client..nella pagina mi da sempre qll'errore!!

alx_81 Profilo | Guru

>la stored lato server...ovvero su sql...funziona...mentre lato
>client..nella pagina mi da sempre qll'errore!!
allora posta il codice che usi per chiamare la sp..
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

augusto890 Profilo | Junior Member

Questa è la chiamata alla funzione:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

mentre questa è la funzione nella classe:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

alx_81 Profilo | Guru

Sembra tutto corretto..
hai fatto un bel debug dei parametri che arrivano?
Hai profilato la chiamata con SQL Profiler, lanciando proprio la stessa su Management Studio?
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

augusto890 Profilo | Junior Member

>Sembra tutto corretto..
>hai fatto un bel debug dei parametri che arrivano?
in che senso? stampando i dati che arrivano?
>Hai profilato la chiamata con SQL Profiler, lanciando proprio
>la stessa su Management Studio?
che intendi? scusami ma non sono molto afferrato nell programmazione microsoft!

cmq i dati che gli passo sono gli stessi con cui ho testato la stored da managment sudio...non ha senso questo errore...boh...non so che dire...

cmq grazie dell'aiuto finora!

alx_81 Profilo | Guru

>>Sembra tutto corretto..
>>hai fatto un bel debug dei parametri che arrivano?
>in che senso? stampando i dati che arrivano?
no, ho compilato col cervello e sembra corretto a prima vista..

>che intendi? scusami ma non sono molto afferrato nell programmazione
>microsoft!
se hai sql server, dovresti avere anche un tool chiamato SQL Query Profiler.
Lancialo, connettiti all'istanza e esegui la pagina. Quando hai l'errore, torna su profiler, stoppa la traccia e cerca la sp, prendi la riga di comando che lancia ed eseguila su sql server management studio in una nuova query. Solo così lanci effettivamente il comando IDENTICO.
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

augusto890 Profilo | Junior Member

>>>Sembra tutto corretto..
>>>hai fatto un bel debug dei parametri che arrivano?
>>in che senso? stampando i dati che arrivano?
>no, ho compilato col cervello e sembra corretto a prima
>vista..
E un bello sport compilare col cervello!
dovresti provare a iniziare
>>che intendi? scusami ma non sono molto afferrato nell programmazione
>>microsoft!
>se hai sql server, dovresti avere anche un tool chiamato SQL
>Query Profiler.
>Lancialo, connettiti all'istanza e esegui la pagina. Quando hai
>l'errore, torna su profiler, stoppa la traccia e cerca la sp,
>prendi la riga di comando che lancia ed eseguila su sql server
>management studio in una nuova query. Solo così lanci effettivamente
>il comando IDENTICO.
sono dal computer del lavoro...e non ho i privilegi per lanciare il sql query profiler! ho provato ma mi blocca...
uff...roba da impazzire!!!

alx_81 Profilo | Guru

>sono dal computer del lavoro...e non ho i privilegi per lanciare
>il sql query profiler! ho provato ma mi blocca...
>uff...roba da impazzire!!!
Allora fai un bel debug e guarda proprio per bene i parametri passati.. perchè mi sembra strano che vada su sql e non da codice, e l'unica cosa che può rompere le scatole sono i parametri..

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

artcava Profilo | Newbie

Beccato!!!

Avevo lo stesso problema con una SP che banalmente fa questo...

ALTER PROCEDURE [dbo].[USERS_IU] @IdUser INT OUTPUT, @UserName VARCHAR(50), @Password VARCHAR(50), @Name VARCHAR(50), @Surname VARCHAR(50), @IdGroup INT, @ParentIdUser INT, @Email VARCHAR(50), @Phone VARCHAR(50), @IsActive BIT AS BEGIN IF EXISTS(SELECT * FROM USERS WHERE (IdUser = @IdUser)) BEGIN UPDATE USERS SET UserName = @UserName, Password = @Password, Name = @Name, Surname = @Surname, IdGroup = @IdGroup, ParentIdUser = @ParentIdUser, Email = @Email, Phone = @Phone, IsActive = @IsActive WHERE (IdUser = @IdUser) END ELSE BEGIN INSERT INTO USERS( UserName, Password, Name, Surname, IdGroup, ParentIdUser, Email, Phone, IsActive) VALUES( @UserName, @Password, @Name, @Surname, @IdGroup, @ParentIdUser, @Email, @Phone, @IsActive) SET @IdUser = @@IDENTITY END END

Errore uguale al tuo, ma con l'indice diverso:

String[0]: la proprietà Size ha una dimensione 0 non valida.

Così ho capito, io passavo al mio primo parametro (indice 0) un valore DBNull, passando invece un bel "-1" ha funzionato...
Prova quindi a passare da fuori un string.empty invece che un DBNull...

Fammi sapere...
Marco Cavallo
WebMaster & Software Architect

Il mio sito in continua evoluzione...
My site is constantly evolving...

Vieni a trovarmi!
Join ArtCava now!
http://www.artcava.net/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5