Methoun Ahmed Ответов: 1

Как разрешить ошибку C# " выражение небулевого типа, заданное в контексте, где ожидается условие, рядом '


Ошибка есть:
error "An expression of non-boolean type specified in a context where a condition is expected, near '


Что я уже пробовал:

public partial class ProductWiseReportViewer : Form
{
    SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=StockSF;Integrated Security=True");
    ReportDocument crypt = new ReportDocument();
    public ProductWiseReportViewer()
    {
        InitializeComponent();
    }

    public DateTime date1 { get; set; }

    public DateTime date2 { get; set; }

    public object prname { get; set; }

    private void crystalReportViewer1_Load(object sender, EventArgs e)
    {
        //this.reportViewer1.RefreshReport();
        SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM tblPurchase WHERE Pur_Date between '" + date1 + "'and '" + date2 + "'and'"+prname+"'",con);
        DataTable dt = new DataTable();
        DataSet dst = new DataSet();
        sda.Fill(dst, "tblPurchase");
        crypt.Load(@"F:\Project C#\StockSF\StockSF\RptPurchase.rpt");
        crypt.SetDataSource(dst);
        crystalReportViewer1.ReportSource = crypt;
    }
}

Graeme_Grant

На какой строке выбрасывается ошибка? Это один из них и какой?

crypt.SetDataSource(dst);
crystalReportViewer1.ReportSource = crypt;

[no name]

Вы должны использовать правильный параметризованный запрос, тогда проблема интервала в вашей строке запроса не будет давать вам эту ошибку.

1 Ответов

Рейтинг:
0

OriginalGriff

Хм.
Во-первых, не делай этого. Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
Но посмотрите, какой текст генерирует ваш запрос в написанном виде:

SELECT * FROM tblPurchase WHERE Pur_Date between '2016-03-01'and '2017-02-28'and'prname'

давайте добавим несколько скобок, и вы увидите, на что смотрит SQL:
SELECT * FROM tblPurchase WHERE (Pur_Date BETWEEN '2016-03-01' AND '2017-02-28') AND 'prname'
Так что SQL ожидает prname быть логическим выражением.
Вероятно, вы имеете в виду что - то вроде:
... AND 'prname' = 'myusername'
Но это зависит от тебя.

И я серьезно отношусь к конкатенации строк : исправьте ее везде в вашем приложении, или ваш лучший друг удалит вашу базу данных только для того, чтобы увидеть выражение вашего лица...