Paramètres de champ de bit passin à la procédure stockée à l'aide du cadre d'entité 4.1
-
27-10-2019 - |
Question
Tout,
J'ai été coincé sur le problème suivant toute la journée. J'essaie de passer un appel de procédure stocké paramétré qui comprend des paramètres de champ à trois bits. L'exception que je continue à rencontrer est "Erreur de conversion du type de données nvarchar en bit."
Voici mon code source:
Procédure stockée
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 # Code:
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();
Toute aide serait grandement appréciée. Je prends du retard dans le travail de projet.
Merci, Derek
La solution
Peut-être essayer de faire quelque chose comme
list.Add(
new SqlParameter("print_sql", System.Data.SqlDbType.Bit) { Value = (print_sql != null ? print_sql : DBNull.Value) }
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow