存储过程不返回数据集

时间:2019-07-25 03:14:48

标签: c# sql-server

我需要从C#执行存储过程并获取一个DataSet。使用SELECT语句的存储过程工作得很好,但是当使用INSERT INTO命令时,返回的数据集为空,但实际上数据已插入数据库中。有什么建议吗?

这是存储过程;

ALTER PROCEDURE sp_add_Indicator
    @Rut AS NCHAR(10),
    @Escuela NVARCHAR(50),
    @Indicador NVARCHAR(50),
    @Fecha NVARCHAR(50),
    @Comuna NVARCHAR(50),
    @Codigo NVARCHAR(50)
AS
    INSERT INTO IndicadoresCaso (RutAlumno, Escuela, Indicador, FechaIngresoCaso, Comuna, Codigo) 
    VALUES (@Rut, @Escuela, @Indicador, @Fecha, @Comuna, @Codigo)

这是我的C#代码:

DataSet dsDataSet = new DataSet();

try
{
    using (SqlConnection conn = new SqlConnection(_stringConnection))
    {
        conn.Open();

        SqlCommand sqlComm = new SqlCommand("sp_add_Indicator", conn);
        sqlComm.CommandType = CommandType.StoredProcedure;

        sqlComm.Parameters.AddWithValue("@Rut", "999999999");
        sqlComm.Parameters.AddWithValue("@Escuela", "Any school");
        sqlComm.Parameters.AddWithValue("Indicador", "Any Indicator");
        sqlComm.Parameters.AddWithValue("@Fecha", "Any date");
        sqlComm.Parameters.AddWithValue("@Comuna", "Any Comuna");
        sqlComm.Parameters.AddWithValue("@Codigo", "Any Code");

        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = sqlComm;
        da.Fill(dsDataSet);
        conn.Close();
    }
}

6 个答案:

答案 0 :(得分:1)

您希望从数据集中检索什么?您刚刚插入的值?您已经有了它们,为什么还要再次从数据集中获取它们?

无论如何,SP都必须返回SELECT语句才能返回数据集。因此添加如下语句:

SELECT RutAlumno,Escuela,Indicador,FechaIngresoCaso,Comuna,Codigo
FROM IndicadoresCaso
WHERE RutAlumno = @Rut -- AND Escuela = @Escuela ??

插入后。修改WHERE子句以检索所需的行。

答案 1 :(得分:0)

您的存储过程不包含任何SELECT语句,仅包含INSERT语句。这就是为什么在执行存储过程后没有返回任何数据的原因。

答案 2 :(得分:0)

使您的存储过程仅执行INSERT语句。

如果您要查找返回的插入数据,则在插入之后,您需要编写适当的select语句(在存储过程中)以选择数据。

答案 3 :(得分:0)

INSERT未选择任何代码。

对于INSERT语句,请使用sqlComm.ExecuteNonQuery()

  using (SqlConnection conn = new SqlConnection(_stringConnection))
  {
    conn.Open();
    SqlCommand sqlComm = new SqlCommand("sp_add_Indicator", conn);
    sqlComm.Parameters.AddWithValue("@Rut", "999999999");
    sqlComm.Parameters.AddWithValue("@Escuela", "Any school");
    sqlComm.Parameters.AddWithValue("Indicador", "Any Indicator");
    sqlComm.Parameters.AddWithValue("@Fecha", "Any date");
    sqlComm.Parameters.AddWithValue("@Comuna", "Any Comuna");
    sqlComm.Parameters.AddWithValue("@Codigo", "Any Code");
    sqlComm.CommandType = CommandType.StoredProcedure;

    int rowsAffected = sqlComm.ExecuteNonQuery();
    conn.Close();
  }

变量rowsAffected将告诉您插入了多少条记录。如果要查看新数据,则必须再执行一次SELECT

答案 4 :(得分:0)

如果要返回刚插入的行,并且IndicadoresCaso表具有一个名为IndicadoresCasoID的标识列,则您的存储过程可以执行以下操作:

ALTER PROCEDURE sp_add_Indicator
    @Rut AS NCHAR(10),
    @Escuela NVARCHAR(50),
    @Indicador NVARCHAR(50),
    @Fecha NVARCHAR(50),
    @Comuna NVARCHAR(50),
    @Codigo NVARCHAR(50)
AS
    INSERT INTO IndicadoresCaso (RutAlumno, Escuela, Indicador, FechaIngresoCaso, Comuna, Codigo) 
    VALUES (@Rut, @Escuela, @Indicador, @Fecha, @Comuna, @Codigo);

    SELECT RutAlumno, Escuela, Indicador, FechaIngresoCaso, Comuna, Codigo
    FROM IndicadoresCaso
    WHERE IndicadoresCasoID = scope_identity();

答案 5 :(得分:0)

您可以使用INSERT语句的OUTPUT子句:

INSERT INTO IndicadoresCaso 
    (RutAlumno, Escuela, Indicador, FechaIngresoCaso, Comuna, Codigo) 
    OUTPUT 
    Inserted.RutAlumno, Inserted.Escuela, Inserted.Indicador, 
    Inserted.FechaIngresoCaso,Inserted.Comuna, Inserted.Codugo    
VALUES (@Rut, @Escuela, @Indicador, @Fecha, @Comuna, @Codigo);