我需要从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();
}
}
答案 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);