如何使用GridControl将变量发送到存储过程

时间:2019-04-10 20:28:16

标签: sql winforms devexpress gridcontrol

我正在Windows窗体上使用DevExpress的GridControl,GridControl为我提供了调用存储过程的选项,但是具有默认值,我需要用户输入值,以便它可以使用存储过程进行搜索。

这是我的主要形式:

enter image description here 在左侧,您可以看到用户可以插入需要使用存储过程的值。

这是我的存储过程

ALTER PROCEDURE [dbo].[SPS_PronosticoStock]
    @IdProducto INT,
    @IdBodega INT,
    @FechaInicio DATE,
    @FechaFin DATE
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @Contador INT,          -- Variable que aumenta hasta llegar a @Rango para el ciclo While
            @Rango INT,             -- Diferencia de dìas entre @FechaInicio y @FechaFin
            @FechaDisplayed DATE,   -- Variable que aumentara desde @FechaInicio hasta @FechaFin
            @Stock INT 

    SET @Rango = DATEDIFF(DAY,@FechaInicio , @FechaFin)
    SET @Contador = 0
    SET @FechaDisplayed = @FechaInicio
    SET @Stock = (SELECT Stock FROM Tbl_ProductoBodega WHERE IdProducto = @IdProducto AND IdBodega = @IdBodega) 

    --Inicia Ciclo WHILE
    WHILE @Contador <= @Rango
    BEGIN
        SELECT 
            @FechaDisplayed, Tbl_ProductoBodega.Referencia, (@Stock), Tbl_ProductoBodega.ADU, 
            [Vs_InventarioEnTransitoAcumulado_BETA].CantTotalInsumo, Tbl_ProductoBodega.IdProducto,
            Tbl_ProductoBodega.IdBodega 
        FROM  
            Tbl_ProductoBodega 
        INNER JOIN 
            [Vs_InventarioEnTransitoAcumulado_BETA] ON Tbl_ProductoBodega.IdProducto = [Vs_InventarioEnTransitoAcumulado_BETA].IdProducto
        WHERE 
            Tbl_ProductoBodega.IdProducto = @IdProducto 
            AND Tbl_ProductoBodega.IdBodega = @IdBodega

        --Actualiza las variables locales
        SET @FechaDisplayed = DATEADD(DAY, 1, @FechaDisplayed) 
        SET @Contador = @Contador + 1
        SET @Stock= (@Stock) - (SELECT ADU FROM Tbl_ProductoBodega 
                                WHERE IdProducto = @IdProducto AND IdBodega = @IdBodega) +
                               (SELECT CantTotalInsumo FROM [Vs_InventarioEnTransitoAcumulado_BETA] 
                                WHERE IdProducto = @IdProducto AND IdBodega = @IdBodega)
    END
    --Finaliza ciclo While
END

带有@的值是用户需要输入到软件的值
这是我一直在处理的代码:

 DataTable dt = new DataTable();
String conStr = "Data Source=MSSQLSERVERWA;Initial Catalog=WA_PRUEBAS";
                SqlConnection con = new SqlConnection(conStr);
                SqlCommand com = new SqlCommand("SPS_PronosticoStock", con);
                com.Parameters.AddWithValue(" @IdProducto", Convert.ToInt32(textBox3.Text));
                com.Parameters.AddWithValue("@IdBodega", Convert.ToInt32(textBox4.Text));
                com.Parameters.AddWithValue("@FechaInicio", Convert.ToInt32(textBox1.Text));
                com.Parameters.AddWithValue("@FechaFin", Convert.ToInt32(textBox2.Text));
                com.CommandType = CommandType.StoredProcedure;
                SqlDataAdapter da = new SqlDataAdapter(com);
                try
                {
                    con.Open();
                    da.Fill(dt);
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    if (con.State == ConnectionState.Open)
                        con.Close();
                }
                da.Fill(dt);
                gridControl1.DataSource = dt;

0 个答案:

没有答案