当前位置:编程学习 > C#/ASP.NET >>

我编的C#程序有点问题,请高手指点一下

namespace xs{
    public partial class shangpinxinxichaxun : Form
    {
        public DataSet facNumSet = new DataSet();
        public shangpinxinxichaxun()
        {
            InitializeComponent();
        }
        private void SelspNum_load(object sender, System.EventArgs e)
        {
            try
            {
             SqlConnection thisConnection = new SqlConnection("Data Source=PC-200811012150\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=销售信息管理表");
              thisConnection.Open();
               
                SqlDataAdapter FacNumAdapter = new SqlDataAdapter();
                FacNumAdapter.SelectCommand.CommandText="Select * from shangpinxinxi";
                FacNumAdapter.SelectCommand.Connection=thisConnection;
                FacNumAdapter.Fill(facNumSet, "TableName");
                DataGridTableStyle fn=new DataGridTableStyle();
                fn.AlternatingBackColor=Color.Blue;
                fn.MappingName=facNumSet.DataSetName;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

            string condition = "";
            if (this.textBox1.Text.Trim() != "")
            {
                condition += "商品编号 like '%'+textBox1.Text.Trim()+'%'";
                if (this.textBox2.Text.Trim() != "")
                {
                    condition += "and 商品名称 like '%' + textBox2.Text.Trim()+'%'";
                }
            }
            else
            {
                if (this.textBox2.Text.Trim() != "")
                {
                    condition += "商品名称 like '%' + textBox2.Text.Trim()+'%'";
                }
                else
                {
                    MessageBox.Show("请输入查询条件", "错误");
                    return;
                }
            }
            //////////////////////////////////////////////////////////
            DataView myDV = new DataView(facNumSet.Tables["TableName"]);
            myDV.RowFilter = condition;

            this.dataGridView1.DataSource = myDV;
            ///////////////////////////////////////////
            if (this.dataGridView1.RowCount== 1)
            {
                MessageBox.Show("对不起,货品中没有与您检索条件相匹配的记录!");
                return;
            }
            this.textBox1.Clear();
            this.textBox2.Clear();
        }

这是一个产品信息查询的模块,运行时myDV.RowFilter = condition;处总提示“表达式包含未定义的函数调用 textBox2.Text.Trim()。”这到底是哪的问题啊???  --------------------编程问答-------------------- 建议你把condition打印出来,再看看是哪的错 --------------------编程问答-------------------- condition是什么呀?C#我不是很会 --------------------编程问答-------------------- myDV.RowFilter = condition;
这个condition是你组合出来的SQL语句,应该是数据上出了问题
你可以这样
在myDV.RowFilter = condition;前加一行:
string a=condition;
然后在这行中断,看下a的值,应该是sql语句出了问题
--------------------编程问答--------------------
引用楼主 yututingping 的回复:
if (this.textBox1.Text.Trim() != "")
  {
  condition += "商品编号 like '%'+textBox1.Text.Trim()+'%'";
  if (this.textBox2.Text.Trim() != "")
  {
  condition += "and 商品名称 like '%' + textBox2.Text.Trim()+'%'";
  }
  }
  else
  {
  if (this.textBox2.Text.Trim() != "")
  {
  condition += "商品名称 like '%' + textBox2.Text.Trim()+'%'";
  }

改成:
  if (this.textBox1.Text.Trim() != "")
  {
  condition += "商品编号 like '%'" + textBox1.Text.Trim() +"'%'";
  if (this.textBox2.Text.Trim() != "")
  {
  condition += "and 商品名称 like '%'"+ textBox2.Text.Trim()+ "'%'";
  }
  }
  else
  {
  if (this.textBox2.Text.Trim() != "")
  {
  condition += "商品名称 like '%'"+ textBox2.Text.Trim()+"'%'";
  } --------------------编程问答-------------------- condition += "商品编号 like '%'"+textBox1.Text.Trim()+"'%'";
  引号问题 --------------------编程问答-------------------- 确实是数据问题,运行出来是a=商品编号 like '%'+textBox1.Text.Trim()+'%',这要怎么改啊?我实在是不会了 --------------------编程问答--------------------
引用 2 楼 yututingping 的回复:
condition是什么呀?C#我不是很会

相当于strWhere
stringbuilder sb=new stringbuilder("1=1");
if(textBox1.Text.trim()!="")
sb.apend("商品编号 like '%"+textBox1.Text.Trim()+"%'");

这样写能好一点地
--------------------编程问答-------------------- condition += "商品编号 like '%'+textBox1.Text.Trim()+'%'";

你这行里都把textBox1.Text.Trim()作为字符串了。。应该改成condition += "商品编号 like '%'"+textBox1.Text.Trim()+"'%'"; --------------------编程问答-------------------- 按照8楼的方法改完之后提示的错误变为“语法错误:“1010002”运算符后缺少操作数。”了,1010002是我的商品编号,好像还有其他问题 --------------------编程问答-------------------- 麻烦大家再指点一下吧,毕业设计到这调不过去了,谢谢各位 --------------------编程问答--------------------
引用 7 楼 flyerwing 的回复:
引用 2 楼 yututingping 的回复:
condition是什么呀?C#我不是很会

相当于strWhere
stringbuilder sb=new stringbuilder("1=1");
if(textBox1.Text.trim()!="")
sb.apend("商品编号 like '%"+textBox1.Text.Trim()+"%'");

这样写能好一点……

请问在哪行改? --------------------编程问答-------------------- condition没构造正确 --------------------编程问答--------------------
引用 12 楼 myhope88 的回复:
condition没构造正确

请问一下这是什么意思?没太明白你的意思 --------------------编程问答-------------------- 你可以在程序运行时候,先将condition的值输出来调试看下,就知道你写的这些逻辑,最后得到的condition到底能不能用 --------------------编程问答-------------------- DataView myDV = new DataView(facNumSet.Tables["TableName"]);
  myDV.RowFilter = condition;
这边的condition直接改为myDV.RowFilter="商品编码 like '%1010002%'"
然后运行一下看能不能用 --------------------编程问答-------------------- 议你把condition打印出来,再看看是哪的错

伙计 你不知道那错的时候就打印出来 看以下你就会明白的啊  --------------------编程问答-------------------- 路过>>>>>>>>>>>>>>> --------------------编程问答--------------------
引用 14 楼 myhope88 的回复:
你可以在程序运行时候,先将condition的值输出来调试看下,就知道你写的这些逻辑,最后得到的condition到底能不能用

condition打印出来是 商品编号 like '%'1010002'%' 是有问题 那要怎么修改呢? --------------------编程问答-------------------- condition += "商品编号 like '%"+textBox1.Text.Trim()+"%'";
这样才可以 --------------------编程问答--------------------
引用 18 楼 yututingping 的回复:
引用 14 楼 myhope88 的回复:
你可以在程序运行时候,先将condition的值输出来调试看下,就知道你写的这些逻辑,最后得到的condition到底能不能用

condition打印出来是 商品编号 like '%'1010002'%' 是有问题 那要怎么修改呢?


应该是 商品编号 like '%1010002%'  --------------------编程问答--------------------
引用 15 楼 myhope88 的回复:
DataView myDV = new DataView(facNumSet.Tables["TableName"]);
  myDV.RowFilter = condition;
这边的condition直接改为myDV.RowFilter="商品编码 like '%1010002%'"
然后运行一下看能不能用

运行之后点查询按钮没反应了,没有语法错误,这是怎么回事啊??? --------------------编程问答-------------------- 在组合sql时一定要注意,最好每次都打印出来看下结果是否正确
应该改成这样

condition += "商品名称 like '%" + textBox1.Text.Trim() + "%'";

另外在组合SQL时,前后条件之间的空格也是需要注意的
比如
a=where xxx
b=and
则应该是
a="where xxx";
b=" and";
--------------------编程问答--------------------
引用 16 楼 hepeng154833488 的回复:
议你把condition打印出来,再看看是哪的错

伙计 你不知道那错的时候就打印出来 看以下你就会明白的啊

可是打印出来后我还是不会改啊 --------------------编程问答--------------------
引用 22 楼 deknight 的回复:
在组合sql时一定要注意,最好每次都打印出来看下结果是否正确
应该改成这样

condition += "商品名称 like '%" + textBox1.Text.Trim() + "%'";

另外在组合SQL时,前后条件之间的空格也是需要注意的
比如
a=where xxx
b=and
则应该是
a="where xxx";
b=" and";

按照这个改后点查询还是没反应,这可怎么办呢??? --------------------编程问答-------------------- myDv有数据没?查一下 --------------------编程问答--------------------
引用 20 楼 pamxp 的回复:
应该是 商品编号 like '%1010002……

应该不会,因为我的商品编号不是固定的1010002,是随textbox1变化的
--------------------编程问答--------------------
引用 24 楼 yututingping 的回复:
引用 22 楼 deknight 的回复:
在组合sql时一定要注意,最好每次都打印出来看下结果是否正确
应该改成这样

condition += "商品名称 like '%" + textBox1.Text.Trim() + "%'";

另外在组合SQL时,前后条件之间的空格也是需要注意的
比如
a=where xxx
b=and
则应该是
a="where xxx";
……


把SQL整个打印出来,去SQLSERVER里查询下,如果没数据,那当然是什么都没有了 --------------------编程问答--------------------
引用 25 楼 myhope88 的回复:
myDv有数据没?查一下

这怎么查呀?我不会操作,讲一下吧,拜托了 --------------------编程问答--------------------
引用 27 楼 deknight 的回复:
引用 24 楼 yututingping 的回复:
引用 22 楼 deknight 的回复:
在组合sql时一定要注意,最好每次都打印出来看下结果是否正确
应该改成这样

condition += "商品名称 like '%" + textBox1.Text.Trim() + "%'";

另外在组合SQL时,前后条件之间的空格也是需要注意的
比如
a=where xxx
b……

SQL里我建表时填充数据了呀,既然填了应该能查出来吧? --------------------编程问答-------------------- myDv应该有个函数count吧,自己添加个语句在消息框中输出一下嘛 --------------------编程问答--------------------
引用 29 楼 yututingping 的回复:
引用 27 楼 deknight 的回复:
引用 24 楼 yututingping 的回复:
引用 22 楼 deknight 的回复:
在组合sql时一定要注意,最好每次都打印出来看下结果是否正确
应该改成这样

condition += "商品名称 like '%" + textBox1.Text.Trim() + "%'";

另外在组合SQL时,前后条件之间的空格也是需要……

按理说如果你确实在数据库里写了数据,那应该是可以查的,你把整个SQL打印出来,写在这
另外从你的代码里看,好象没有where啊

Select * from shangpinxinxi where 商品编号 like '%" + textBox1.Text.Trim() + "%' and 商品名称 like '%" + textBox2.Text.Trim() + "%'

where在哪?

改成下面的看看

string condition = "";
  if (this.textBox1.Text.Trim() != "")
  {
  condition = " where 商品编号 like '%'+textBox1.Text.Trim()+'%'";
  if (this.textBox2.Text.Trim() != "")
  {
  condition += " and 商品名称 like '%' + textBox2.Text.Trim()+'%'";
  }
  }
  else
  {
  if (this.textBox2.Text.Trim() != "")
  {
  condition += "商品名称 like '%' + textBox2.Text.Trim()+'%'";
  }
  else
  {
  MessageBox.Show("请输入查询条件", "错误");
  return;
  }

--------------------编程问答-------------------- 其实上面的判断还不是很健壮
你要考虑当text1没有值,text2有值时的sql语句该如何组合
text1有值
sql就是select * from xxx where xxx and xxxx
如果text1没值,text2有值,按上面简单判断就成了
select * from xxx and xxxxxxxxx
就报错了 --------------------编程问答--------------------
引用 31 楼 deknight 的回复:
引用 29 楼 yututingping 的回复:
引用 27 楼 deknight 的回复:
引用 24 楼 yututingping 的回复:
引用 22 楼 deknight 的回复:
在组合sql时一定要注意,最好每次都打印出来看下结果是否正确
应该改成这样

condition += "商品名称 like '%" + textBox1.Text.Trim() + "%'";……

还是没反应啊 --------------------编程问答--------------------
引用 32 楼 deknight 的回复:
其实上面的判断还不是很健壮
你要考虑当text1没有值,text2有值时的sql语句该如何组合
text1有值
sql就是select * from xxx where xxx and xxxx
如果text1没值,text2有值,按上面简单判断就成了
select * from xxx and xxxxxxxxx
就报错了

加上where还是没反应,我刚刚试图用商品名查询点击按钮后还是没反应 --------------------编程问答--------------------
引用 34 楼 yututingping 的回复:
引用 32 楼 deknight 的回复:
其实上面的判断还不是很健壮
你要考虑当text1没有值,text2有值时的sql语句该如何组合
text1有值
sql就是select * from xxx where xxx and xxxx
如果text1没值,text2有值,按上面简单判断就成了
select * from xxx and xxxxxxxxx
就报错了

加上wh……


你把你打印出的sql语句整个拷贝过来看下 --------------------编程问答-------------------- 路过,学习! --------------------编程问答--------------------
引用 35 楼 deknight 的回复:
引用 34 楼 yututingping 的回复:
引用 32 楼 deknight 的回复:
其实上面的判断还不是很健壮
你要考虑当text1没有值,text2有值时的sql语句该如何组合
text1有值
sql就是select * from xxx where xxx and xxxx
如果text1没值,text2有值,按上面简单判断就成了
select * from xxx ……

目前改成这样后有反应了
        private void button1_Click(object sender, EventArgs e)
        {

            string condition = "";
            if (this.textBox1.Text.Trim() != "")
            {
                condition = " select * from shangpinxinxi  where 药品编号='" + textBox1.Text + "' ";

                if (this.textBox2.Text.Trim() != "")
                {
                    condition += " and select * from shangpinxinxi  where 药品名称='" + textBox2.Text + "' ";
                }
            }
            else
            {
                if (this.textBox2.Text.Trim() != "")
                {
                    condition += "select * from shangpinxinxi  where 药品名称='" + textBox2.Text + "' ";

                }
                else

                {
                    MessageBox.Show("请输入查询条件", "错误");
                    return;
                }
            }
            //////////////////////////////////////////////////////////
            DataView myDV = new DataView(facNumSet.Tables["TableName"]);

            myDV.RowFilter = condition;
            
            this.dataGridView1.DataSource = myDV;
            ///////////////////////////////////////////
            if (this.dataGridView1.RowCount== 1)
            {
                MessageBox.Show("对不起,货品中没有与您检索条件相匹配的记录!");
                return;
            }
            this.textBox1.Clear();
            this.textBox2.Clear();
        }
报的错是语法错误:“shangpinxinxi”运算符后缺少操作数。 --------------------编程问答-------------------- 哪能把select。。。。这些语句赋给rowfilter属性啊 --------------------编程问答-------------------- string condition = "";
bool flag=false;
  if (this.textBox1.Text.Trim() != "")
  {
     condition+="商品编号 like '%"+this.textBox1.Text.Trim()+"%'";
     flag=true;
  }
  if (this.textBox2.Text.Trim() != "")
{
   if(flag)
  {
    condition+=" and 商品名称 like '%"+this.textBox2.Text.Trim()+"%'";
  }
  else
    condition+="商品名称 like '%"+this.textBox2.Text.Trim()+"%'";

}
if(condition=="")
{
MessageBox.Show("请输入查询条件", "错误");
  return;

} --------------------编程问答--------------------
引用 38 楼 myhope88 的回复:
哪能把select。。。。这些语句赋给rowfilter属性啊

问题解决了,用了其他的方法,把语句彻底给换了,终于出来了,很感谢大家的帮助
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,