Pregunta

Todos,

He estado atrapado en el siguiente número todo el día. Estoy tratando de hacer una llamada de procedimiento almacenado parametrizado que incluya parámetros de campo de tres bits. La excepción que sigo encontrando es "Error al convertir el tipo de datos nvarchar a bit".

Aquí está mi código fuente:

Procedimiento almacenado

ALTER PROCEDURE usp_TestParamProc
    @price_segment_set_id VARCHAR(8) = NULL,
    @segment_group_id VARCHAR(8) = NULL,
    @segment_price_band_id VARCHAR(8) = NULL,
    @segment_id VARCHAR(8) = NULL,
    @include_source_price_bands BIT = 0,
    @apply_segmentation BIT = 0,
    @print_sql BIT = 0
AS
BEGIN
    SET NOCOUNT ON;
    SELECT *
    FROM MarketingSegmentDetails
    WHERE SegmentID = @segment_id

END
GO

Código C#:

        var segment_id = "1";
        string segment_group_id = "1";
        string segment_price_band_id = "1";
        string price_segment_set_id = "1";
        var include_source_price_bands = false;
        var apply_segmentation = false;
        var print_sql = false;

        using (var context = new PricingContext())
        {
            var list = new List<object>();
            list.Add(price_segment_set_id == null
                         ? new SqlParameter("price_segment_set_id", DBNull.Value)
                         : new SqlParameter("price_segment_set_id", price_segment_set_id));
            list.Add(segment_group_id == null
                        ? new SqlParameter("segment_group_id", DBNull.Value)
                        : new SqlParameter("segment_group_id", segment_group_id));
            list.Add(segment_price_band_id == null
                        ? new SqlParameter("segment_price_band_id", DBNull.Value)
                        : new SqlParameter("segment_price_band_id", segment_price_band_id));
            list.Add(segment_id == null
                        ? new SqlParameter("segment_id", DBNull.Value)
                        : new SqlParameter("segment_Id", segment_id));
            list.Add(include_source_price_bands == null 
                        ? new SqlParameter("include_source_price_bands", DBNull.Value)
                        : new SqlParameter("include_source_price_bands", Convert.ToBoolean(include_source_price_bands)));
            list.Add(apply_segmentation == null
                        ? new SqlParameter("apply_segmentation", DBNull.Value)
                        : new SqlParameter("apply_segmentation", Convert.ToBoolean(apply_segmentation)));
            list.Add(print_sql == null
                         ? new SqlParameter("print_sql", DBNull.Value)
                         : new SqlParameter("print_sql", Convert.ToBoolean(print_sql)));

            var segments = context.Database.SqlQuery<usp_SegmentProcessing>("usp_TestParamProc price_segment_set_id, segment_group_id, segment_price_band_id, segment_id, include_source_price_bands, apply_segmentation, print_sql", list.ToArray()).ToList();

Cualquier ayuda sería muy apreciada. Me estoy quedando atrás en el trabajo del proyecto.

Gracias Derek

¿Fue útil?

Solución

Tal vez intente hacer algo como

list.Add(
   new SqlParameter("print_sql", System.Data.SqlDbType.Bit) { Value = (print_sql != null ? print_sql : DBNull.Value) }
);

http://msdn.microsoft.com/en-us/library/h8f14f0z.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top