英文:
Stored procedure return always NULL value on an output parameter
问题
I'm trying to fetch the value of a stored procedure parameter but it return always a NULL value.
If I execute the stored procedure by the server client it shows the correct value for that parameter, but as you can see from the image, the code returns a null value for the parameter @esitoRecuperoAmicizie
.
In this screenshot, the debug parameter value:
This is the stored procedure code:
ALTER PROCEDURE [dbo].[SocialPartyFinder_RecuperaListaAmici_GET]
@IdUtente INT,
@esitoRecuperoAmicizie INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SELECT
ListaAmici.FkUPropAmicizia, Utenti.Utnte_Username,
Utenti.StatoConnessione, Utenti.ImmagineProfilo
FROM
ListaAmici
INNER JOIN
Utenti ON ListaAmici.FkAmico = Utenti.IdUtente
WHERE
ListaAmici.FkUPropAmicizia = @IdUtente
SET @esitoRecuperoAmicizie = 10;
END TRY
BEGIN CATCH
SET @esitoRecuperoAmicizie = 99;
END CATCH
END
This is the code that calls the stored procedures and fetches the value from the parameter:
public List<Utenti> recuperaListaAmici(int id)
{
string errore = String.Empty;
List<Utenti> listaAmici = new List<Utenti>();
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = connectionString;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "SocialPartyFinder_RecuperaListaAmici_GET";
SqlParameter parametroInput = new SqlParameter();
parametroInput.ParameterName = "@IdUtente";
parametroInput.Direction = System.Data.ParameterDirection.Input;
parametroInput.Value = id;
parametroInput.DbType = System.Data.DbType.Int32;
cmd.Parameters.Add(parametroInput);
SqlParameter parameteroOutput = new SqlParameter();
parameteroOutput.ParameterName = "@esitoRecuperoAmicizie";
parameteroOutput.DbType = System.Data.DbType.Int32;
parameteroOutput.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(parameteroOutput);
try
{
sqlConnection.Open();
try
{
SqlDataReader reader = cmd.ExecuteReader();
Convert.ToInt32(cmd.Parameters["@esitoRecuperoAmicizie"].Value);
if (reader.HasRows)
{
while (reader.Read())
{
// DO SOMETHING
}
}
else
{
// DO SOMETHING
}
return listaAmici;
}
catch
{
// DO SOMETHING
}
}
catch
{
// DO SOMETHING
}
return listaAmici;
}
英文:
I'm trying to fetch the value of a stored procedure parameter but it return always a NULL value.
If I execute the stored procedure by the server client it shows the correct value for that parameter, but as you can see from the image, the code returns a null value for the parameter @esitoRecuperoAmicizie
.
In this screenshot, the debug parameter value:
This is the stored procedure code:
ALTER PROCEDURE [dbo].[SocialPartyFinder_RecuperaListaAmici_GET]
@IdUtente INT,
@esitoRecuperoAmicizie INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SELECT
ListaAmici.FkUPropAmicizia, Utenti.Utnte_Username,
Utenti.StatoConnessione, Utenti.ImmagineProfilo
FROM
ListaAmici
INNER JOIN
Utenti ON ListaAmici.FkAmico = Utenti.IdUtente
WHERE
ListaAmici.FkUPropAmicizia = @IdUtente
SET @esitoRecuperoAmicizie = 10;
END TRY
BEGIN CATCH
SET @esitoRecuperoAmicizie = 99;
END CATCH
END
This is the code that calls the stored procedures and fetches the value from the parameter:
public List<Utenti> recuperaListaAmici(int id)
{
string errore = String.Empty;
List<Utenti> listaAmici = new List<Utenti>();
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString = connectionString;
SqlCommand cmd = new SqlCommand();
cmd.Connection = sqlConnection;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = "SocialPartyFinder_RecuperaListaAmici_GET";
SqlParameter parametroInput = new SqlParameter();
parametroInput.ParameterName = "@IdUtente";
parametroInput.Direction = System.Data.ParameterDirection.Input;
parametroInput.Value = id;
parametroInput.DbType = System.Data.DbType.Int32;
cmd.Parameters.Add(parametroInput);
SqlParameter parameteroOutput = new SqlParameter();
parameteroOutput.ParameterName = "@esitoRecuperoAmicizie";
parameteroOutput.DbType = System.Data.DbType.Int32;
parameteroOutput.Direction = System.Data.ParameterDirection.Output;
cmd.Parameters.Add(parameteroOutput);
try
{
sqlConnection.Open();
try
{
SqlDataReader reader = cmd.ExecuteReader();
Convert.ToInt32(cmd.Parameters["@esitoRecuperoAmicizie"].Value);
if (reader.HasRows)
{
while (reader.Read())
{
// DO SOMETHING
}
}
else
{
// DO SOMETHING
}
return listaAmici;
}
catch
{
// DO SOMETHING
}
}
catch
{
// DO SOMETHING
}
return listaAmici;
}
答案1
得分: 0
使用Try和Catch应仅用于错误,
此查询返回两个结果,将导致程序代码中的错误,因此建议您按如下方式修改代码:
IF EXISTS(SELECT 1 FROM ListaAmici WHERE ListaAmici.FkUPropAmicizia = @IdUtente)
BEGIN
SELECT @esitoRecuperoAmicizie = 10
END
ELSE
BEGIN
SELECT @esitoRecuperoAmicizie = 99
END
SELECT
ListaAmici.FkUPropAmicizia,
Utenti.Utnte_Username,
Utenti.StatoConnessione,
Utenti.ImmagineProfilo,
@esitoRecuperoAmicizie AS esitoReroAmicizie
FROM
ListaAmici
INNER JOIN
Utenti ON ListaAmici.FkAmico = Utenti.IdUtente
WHERE
ListaAmici.FkUPropAmicizia = @IdUtente
英文:
The use of Try and Catch should only be for errors,
This query returns two results that will cause an error in the program code, so I suggest you modify the code as follows:
IF EXISTS(SELECT 1 FROM ListaAmici WHERE ListaAmici.FkUPropAmicizia = @IdUtente)
BEGIN
SELECT @esitoRecuperoAmicizie = 10
END
ELSE
BEGIN
SELECT @esitoRecuperoAmicizie = 99
END
SELECT
ListaAmici.FkUPropAmicizia,
Utenti.Utnte_Username,
Utenti.StatoConnessione,
Utenti.ImmagineProfilo,
@esitoRecuperoAmicizie AS esitoReroAmicizie
FROM
ListaAmici
INNER JOIN
Utenti ON ListaAmici.FkAmico = Utenti.IdUtente
WHERE
ListaAmici.FkUPropAmicizia = @IdUtente
答案2
得分: -1
因为@esitoRecuperoAmicizie
的代码逻辑只是被赋值而没有添加任何值,所以当你调用存储过程时,该值将为空。
就像选择@esitoRecuperoAmicizie
from dual一样 - 如果你这样做,将会得到返回的值或使用@esitoRecuperoAmicizie
变量设置的值。
尝试一下,它会起作用。
英文:
The value will be null when you hit the stored procedure because the code logic of @esitoRecuperoAmicizie
is just being assigned and not added in any value.
Like select @esitoRecuperoAmicizie
from dual - if you do this this will give you the value returned or set using @esitoRecuperoAmicizie
variable
Try it .. it will work
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论