تولید پویای رشته Sql و ارسال پارامتر برای عملگر Like
اهمیت: مهم نوع: درخواست راهنمایی شماره نگارش: 2.4
با سلام
با استفاده از کد زیر که sql آن به صورت پویا تولید شده است :
.MainTableDataSource(dataSource =>
{
dataSource.GenericDataReader(
providerName : "System.Data.SqlServerCe.4.0",
connectionString : @"Data Source=data.sdf;password=******",
sql : "Select [VoucherRows].[Description] AS [Description],[VoucherRows].[Creditor] AS [Creditor],[VoucherRows].[Debtor] AS [Debtor],[Vouchers].[Number] AS [Number],
[Vouchers].[SubmitDate] AS [SubmitDate] 
From [VoucherRows] AS [VoucherRows],[Vouchers] AS [Vouchers]  
Where  [Vouchers].[Id]  =  [VoucherRows].[VoucherId]  And  [Vouchers].[Number]  >=  @p1  And  [Vouchers].[Number]  <=  @p2  And 
 [Vouchers].[Description]  Like  '%' + @p3 + '%'    Order By [Vouchers].[SubmitDate] DESC,[Vouchers].[Number] ASC",
parametersValues : new object[] {50,100,"مقدار"}
);
})
میخواهم گزارشی را تهیه کنم ولی برای پارامتر سوم که از عملگر Like استفاده میکند، خطای Input string was not in correct ... را می‌گیرم. 
مشکل از کجاست؟رشته Sql تولید شده؟ یا نحوه ارسال پارامتر؟
  • #
    ‫۱۰ سال و ۵ ماه قبل، دوشنبه ۲۲ اردیبهشت ۱۳۹۳، ساعت ۱۸:۴۴
    دقیقا مانند مباحث کار با پارامترها در ADO.NET است:
    command.Parameters.AddWithValue("@p3", "%test%");
    در اینجا هم در کوئری می‌نویسید like @p3 و مقدار آن‌را درصد دار تعریف می‌کنید:
                    dataSource.GenericDataReader(
                        providerName: "System.Data.SQLite",
                        connectionString: "Data Source=" + System.IO.Path.Combine(AppPath.ApplicationPath, "data\\blogs.sqlite"),
                        sql: @"SELECT [url], [name], [NumberOfPosts], [AddDate]
                                   FROM [tblBlogs]
                                   WHERE [NumberOfPosts]>=@p1 or [name] like @p2",
                        parametersValues: new object[]
                        {
                            10 /* 1st parameter's value */, 
                            "%blog%" /* 2nd parameter's value */
                        }
                    );