Problema no envio e recebimento de data de código C # para procedimento SQL Server

votos
0

Eu estou gerando um relatório através do envio de algum parâmetro de código C # para um procedimento armazenado SQL Server. Estou enviando um valor de cadeia e dois valores de data como um parâmetros de procedimento SQL Server, mas eu tendo alguns problemas com o parâmetro data. Fui verificar o meu procedimento SQL Server armazenados; quando passar manualmente um valor, ele está retornando os resultados corretos, mas quando eu estou passando o valor do parâmetro do meu código, ele está mostrando nada no relatório.

SQL Server procedimento armazenado:

[GetLedger]
    (@optb VARCHAR(50),
     @startsession DATE,
     @endsession DATE)
AS
    DECLARE @openingtable
    DECLARE @strtdt DATE
    DECLARE @enddate DATE
    DECLARE @query NVARCHAR(MAX)
BEGIN
    SET @openingtable = @optb
    SET @strtdt = @startsession
    SET @enddate = @endsession
    SET @query = N'SELECT  l.trandate,l.voucherno,l.itemno,l.itemname,o.opening + COALESCE(SUM(l.recieve - l.returnback - l.issue) OVER (PARTITION BY l.itemno ORDER BY l.trandate,seq ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING),0) AS opening,l.recieve,l.returnback,l.issue,o.opening + SUM(l.recieve - l.returnback - l.issue) OVER (PARTITION BY l.itemno ORDER BY l.trandate,seq) AS balance,l.to_dept,l.remarks
FROM @openingstock o
INNER JOIN
(
SELECT trandate,voucherno,itemno,itemname,to_dept,remarks,isnull(recieve,0) AS recieve,isnull(issue,0) AS issue,isnull(returnback,0) AS returnback,
row_number() over (partition by itemno,trandate order by itemno) as seq
FROM @ledgertable
) l
ON l.itemno = o.itemno
where l.trandate between CONVERT(Date,''' + CONVERT(VARCHAR(10),@strtdt, 101)+''', 101) and CONVERT(DATE,'''+ CONVERT(VARCHAR(10),DATEADD(DD,1,@enddate),101) + ''', 101)
ORDER BY l.itemno,trandate'

    EXECUTE(@query)
END

C # código é:

private ledgerdt GetData(string p1,string p2,string p3)
{
    string DateString = p2;
    IFormatProvider culture = new CultureInfo(en-US, true);
    DateTime pp2 = DateTime.ParseExact(DateString, yyyy-MM-dd, culture);
    string DateString2 = p2;
    IFormatProvider culture2 = new CultureInfo(en-US, true);
    DateTime pp3 = DateTime.ParseExact(DateString, yyyy-MM-dd, culture2);

    using (SqlConnection con = new SqlConnection(conString))
    {
        SqlCommand cmd = new SqlCommand(GetLedger, con);

        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue(@optb, p1);
            cmd.Parameters.AddWithValue(@startsession, pp2.ToString(yyyy-MM-dd));
            cmd.Parameters.AddWithValue(@endsession, pp3.ToString(yyyy-MM-dd));

            sda.SelectCommand = cmd;

            using (ledgerdt ds = new ledgerdt())
            {
                sda.Fill(ds, ledgerdt);
                return ds;
            }
        }
}

Por favor, diga a solução ..... Eu sei que eu estou fazendo algo errado no tipo de dados.

Publicado 20/09/2018 em 04:25
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Adicionado o código usando Adicionar em vez de AddWithValue:

using (SqlConnection con = new SqlConnection(conString))
using (SqlCommand cmd = new SqlCommand("GetLedger", con))
using (SqlDataAdapter sda = new SqlDataAdapter())
{
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SQLParameter("@optb", Data.SqlDbType.VarChar);
        cmd.Parameters.Add(new SQLParameter("@startsession", Data.SqlDbType.DateTime));

        cmd.Parameters.Add(new SQLParameter("@endsession", Data.SqlDbType.DateTime));
        command.Parameters("@optb").Value = p1;
        command.Parameters("@startsession").Value = pp2;
        command.Parameters("@startsession").Value = pp3;

        sda.SelectCommand = cmd;

        using (ledgerdt ds = new ledgerdt())
        {
            sda.Fill(ds, "ledgerdt");
            return ds;
        }
}
Respondeu 20/09/2018 em 05:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more