我编的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语句出了问题
--------------------编程问答--------------------
改成:
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()+'%',这要怎么改啊?我实在是不会了 --------------------编程问答--------------------
相当于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是我的商品编号,好像还有其他问题 --------------------编程问答-------------------- 麻烦大家再指点一下吧,毕业设计到这调不过去了,谢谢各位 --------------------编程问答--------------------
请问在哪行改? --------------------编程问答-------------------- condition没构造正确 --------------------编程问答--------------------
请问一下这是什么意思?没太明白你的意思 --------------------编程问答-------------------- 你可以在程序运行时候,先将condition的值输出来调试看下,就知道你写的这些逻辑,最后得到的condition到底能不能用 --------------------编程问答-------------------- DataView myDV = new DataView(facNumSet.Tables["TableName"]);
myDV.RowFilter = condition;
这边的condition直接改为myDV.RowFilter="商品编码 like '%1010002%'"
然后运行一下看能不能用 --------------------编程问答-------------------- 议你把condition打印出来,再看看是哪的错
伙计 你不知道那错的时候就打印出来 看以下你就会明白的啊 --------------------编程问答-------------------- 路过>>>>>>>>>>>>>>> --------------------编程问答--------------------
condition打印出来是 商品编号 like '%'1010002'%' 是有问题 那要怎么修改呢? --------------------编程问答-------------------- condition += "商品编号 like '%"+textBox1.Text.Trim()+"%'";
这样才可以 --------------------编程问答--------------------
应该是 商品编号 like '%1010002%' --------------------编程问答--------------------
运行之后点查询按钮没反应了,没有语法错误,这是怎么回事啊??? --------------------编程问答-------------------- 在组合sql时一定要注意,最好每次都打印出来看下结果是否正确
应该改成这样
condition += "商品名称 like '%" + textBox1.Text.Trim() + "%'";
另外在组合SQL时,前后条件之间的空格也是需要注意的
比如
a=where xxx
b=and
则应该是
a="where xxx";
b=" and";
--------------------编程问答--------------------
可是打印出来后我还是不会改啊 --------------------编程问答--------------------
按照这个改后点查询还是没反应,这可怎么办呢??? --------------------编程问答-------------------- myDv有数据没?查一下 --------------------编程问答--------------------
应该不会,因为我的商品编号不是固定的1010002,是随textbox1变化的
--------------------编程问答--------------------
把SQL整个打印出来,去SQLSERVER里查询下,如果没数据,那当然是什么都没有了 --------------------编程问答--------------------
这怎么查呀?我不会操作,讲一下吧,拜托了 --------------------编程问答--------------------
SQL里我建表时填充数据了呀,既然填了应该能查出来吧? --------------------编程问答-------------------- myDv应该有个函数count吧,自己添加个语句在消息框中输出一下嘛 --------------------编程问答--------------------
按理说如果你确实在数据库里写了数据,那应该是可以查的,你把整个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
就报错了 --------------------编程问答--------------------
还是没反应啊 --------------------编程问答--------------------
加上where还是没反应,我刚刚试图用商品名查询点击按钮后还是没反应 --------------------编程问答--------------------
你把你打印出的sql语句整个拷贝过来看下 --------------------编程问答-------------------- 路过,学习! --------------------编程问答--------------------
目前改成这样后有反应了
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;
} --------------------编程问答--------------------
问题解决了,用了其他的方法,把语句彻底给换了,终于出来了,很感谢大家的帮助
补充:.NET技术 , C#