如何解决C#错误“在预期条件的上下文中指定的非布尔类型的表达式,在'附近' [英] How to resolve C# error “an expression of non-boolean type specified in a context where a condition is expected, near '

查看:705
本文介绍了如何解决C#错误“在预期条件的上下文中指定的非布尔类型的表达式,在'附近'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

错误是:

 error在预期条件的上下文中指定的非布尔类型的表达式,靠近'





我的尝试:



  public   partial   class  ProductWiseReportViewer:Form 
{
SqlConnection con = new SqlConnection( Data Source =。 ;初始目录= StockSF;集成安全性=真);
ReportDocument crypt = new ReportDocument();
public ProductWiseReportViewer()
{
InitializeComponent();
}

public DateTime date1 { get ; set ;}

public DateTime date2 { get ; set ; }

public object prname {获得; set ; }

private void crystalReportViewer1_Load( object sender,EventArgs e)
{
// this.reportViewer1。 RefreshReport();
SqlDataAdapter sda = new SqlDataAdapter( SELECT * FROM tblPurchase WHERE Pur_Date介于' + date1 + '和' + date2 + '和' + 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;
}
}

解决方案

嗯。

首先,请不要去做。永远不要连接字符串来构建SQL命令。它让您对意外或故意的SQL注入攻击持开放态度,这可能会破坏您的整个数据库。请改用参数化查询。

但请查看您的查询生成的文本:

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



let添加一些括号,您可以看到SQL正在查看的内容:

  SELECT  *  FROM  tblPurchase  WHERE (Pur_Date  BETWEEN  '  2016-03-01'  AND  '  2017-02-28')< span class =code-keyword> AND  '  prname' 

所以SQL希望 prname 是一个布尔表达式。

可能你的意思是:

 ...  AND  '  prname ' = '  myusername' 

但这取决于你。



而且我对字符串连接非常认真:在应用程序的任何地方修复它,或者你最好的伙伴会删除你的数据库只是为了看到你脸上的表情。 ..


Error is:

error "An expression of non-boolean type specified in a context where a condition is expected, near '



What I have tried:

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;
    }
}

解决方案

Um.
First off, don't do that. Never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Use Parametrized queries instead.
But look at what text your query as written generates:

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


lets add a few brackets, and you can see what SQL is looking at:

SELECT * FROM tblPurchase WHERE (Pur_Date BETWEEN '2016-03-01' AND '2017-02-28') AND 'prname'

So SQL expects prname to be a boolean expression.
Probably, you mean something like:

... AND 'prname' = 'myusername'

But that's up to you.

And I'm serious about the string concatenation : fix it everywhere in your app, or your best mate will delete your DB just to see the look on your face...


这篇关于如何解决C#错误“在预期条件的上下文中指定的非布尔类型的表达式,在'附近'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆