这样的数据库查询语句为什么执行一次查询工作后就不能再查询了?

bleempan 2003-07-19 10:06:38
void SubmitBtn_Click(Object Sender, EventArgs e)
{
string MyConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath("myweb.mdb");
OleDbConnection MyConn = new OleDbConnection(MyConnString);

DataSet ds = new DataSet();;
OleDbDataAdapter MyAdapter = new OleDbDataAdapter();
OleDbCommand cmd = new OleDbCommand("select * from Members where UserName like '%'+'"+TextBox1.Text+"'+'%' ",MyConn);

MyAdapter.SelectCommand = cmd;
MyAdapter.Fill(ds,"Members");

MyDataGrid.DataSource = ds;
MyDataGrid.DataMember = "Members";
MyDataGrid.DataBind();
}
我在输入框中输入一个陈字,可以找出名字里有'陈'这个字的全部同学,可是当我执行一次后第二次就不能再查了,还望高手赐教!谢!!
...全文
112 20 打赏 收藏 举报
写回复
20 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rougherstandby 2003-07-21
  • 打赏
  • 举报
回复
你看看你的Page_Load里面都写了什么
shannon1 2003-07-21
  • 打赏
  • 举报
回复
我想是你的SQL语句在连接时出现了问题:
"select * from Members where UserName like '%'+'"+TextBox1.Text+"'+'%' "
如果你的TextBox1中的输入值是"陈",则整句语句连接后如下:
"select * from Members where UserName like '%'+陈+'%'"
机器将不知道把里面的陈理解成什么,这肯定是会错的。
帮助里(like比较)有一个例子:
SELECT t.title_id, t.title FROM authors a, titleauthor ta, titles t WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id AND a.au_lname LIKE @au_lname + '%'
这里@au_lname是一个变量,而你将TextBox1.Text这样加进去则什么也不是,你可能混淆了。
你的查询语句连接后应该是这样的:
"select * from Members where UserName like '%陈%'"
那在写的时候就要写成(还要注意\'):
"select * from Members where UserName like \'%"+TextBox1.Text+"%\'"
a05 2003-07-21
  • 打赏
  • 举报
回复
用*
oenpm 2003-07-21
  • 打赏
  • 举报
回复
%
chnking 2003-07-19
  • 打赏
  • 举报
回复
我看事件中有Raise PostBackEvent,你是不是还有个TextBox1_Change事件啊,在这里面你都是什么代码?
batisituta 2003-07-19
  • 打赏
  • 举报
回复
gz
qwbyxw 2003-07-19
  • 打赏
  • 举报
回复
将查询语句
select * from Members where UserName like '%'+'"+TextBox1.Text+"'+'%' "
换成
select * from Members where UserName like *"+TextBox1.Text.Trim()+"*"

Access数据库好像不支持%,也不需要单引号
bleempan 2003-07-19
  • 打赏
  • 举报
回复
Trace
请求详细信息
会话 ID: rxoqpe45wazyfb55yfz0hs55 请求类型: GET
请求的时间: 2003-7-19 11:52:48 状态代码: 200
请求编码: 简体中文(GB2312) 响应编码: 简体中文(GB2312)
使用模糊查询后上面Trace的详细信息中的请求的时间也不会变了,不知道怎么回事?
bleempan 2003-07-19
  • 打赏
  • 举报
回复
使用Trace结果为
aspx.page Begin Init
aspx.page End Init 0.000071 0.000071
aspx.page Begin LoadViewState 0.000112 0.000041
aspx.page End LoadViewState 0.000301 0.000189
aspx.page Begin ProcessPostData 0.000337 0.000036
aspx.page End ProcessPostData 0.000408 0.000072
aspx.page Begin ProcessPostData Second Try 0.000441 0.000033
aspx.page End ProcessPostData Second Try 0.000469 0.000028
aspx.page Begin Raise ChangedEvents 0.000497 0.000028
aspx.page End Raise ChangedEvents 0.000539 0.000042
aspx.page Begin Raise PostBackEvent 0.000567 0.000028
TextBox1的值 潘 0.004999 0.004432
aspx.page End Raise PostBackEvent 0.050149 0.045150
aspx.page Begin PreRender 0.050237 0.000088
aspx.page End PreRender 0.050298 0.000061
aspx.page Begin SaveViewState 0.052718 0.002421
aspx.page End SaveViewState 0.052899 0.000180
aspx.page Begin Render 0.052937 0.000039
aspx.page End Render 0.054887 0.001950
第一次在输入框中输入潘,TextBox1的值变为'潘'这是正确的,而第二次输入任何值,用Trace.warn显示出的值都是原来的值,TextBox1的值不会变了??而我第一次用潘胜杰查找,第二次用别的值查找会得到正确的结果。现在就是模糊查询后那个TextBox1的值就不变了,不知道为什么?
zjjszw 2003-07-19
  • 打赏
  • 举报
回复
string str="select * from Table where aaa like '%"+TextBox1.Text+"%'"
bleempan 2003-07-19
  • 打赏
  • 举报
回复
不行...
qwbyxw 2003-07-19
  • 打赏
  • 举报
回复
“关闭了问题还是一样.找一个人的时候是好的,就是进行模糊查询的时候就出错了,查一次模糊查询后,接着就不能查了。”
有什么错误提示没有,给出来。
如没有,则将
select * from Members where UserName like '%'+'"+TextBox1.Text+"'+'%' "
换成
select * from Members where UserName like '"+"%"+TextBox1.Text.Trim()+"%" + "'"

string str = "%"+TextBox1.Text.Trim()+"%";
连结串改为select * from Members where UserName like '"+ str + "'"

试一下
qwbyxw 2003-07-19
  • 打赏
  • 举报
回复
试一下
void SubmitBtn_Click(Object Sender, EventArgs e)
{
string MyConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath("myweb.mdb");
OleDbConnection MyConn = new OleDbConnection(MyConnString);

DataSet ds = new DataSet();;
OleDbDataAdapter MyAdapter = new OleDbDataAdapter("select * from Members where UserName like '%'+'"+TextBox1.Text+"'+'%' ",MyConn); //修改
MyConn.Open(); //增加

MyAdapter.Fill(ds,"Members");

MyDataGrid.DataSource = ds;
MyDataGrid.DataMember = "Members";
MyDataGrid.DataBind();
MyConn.Close(); //增加
}
zjjszw 2003-07-19
  • 打赏
  • 举报
回复
MyDataGrid.DataSource = ds.Table[0].DefaultView;

bleempan 2003-07-19
  • 打赏
  • 举报
回复
关闭了问题还是一样.找一个人的时候是好的,就是进行模糊查询的时候就出错了,查一次模糊查询后,接着就不能查了。
zjjszw 2003-07-19
  • 打赏
  • 举报
回复
void SubmitBtn_Click(Object Sender, EventArgs e)
{
string MyConnString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath("myweb.mdb");

OleDbConnection MyConn = new OleDbConnection(MyConnString);
DataSet ds = new DataSet();;

OleDbDataAdapter MyAdapter = new OleDbDataAdapter("select * from Members where UserName like '%'+'"+TextBox1.Text+"'+'%' ",MyConn);

MyAdapter.Fill(ds,"Members");

MyDataGrid.DataSource = ds;
MyDataGrid.DataBind();
}
cl_03 2003-07-19
  • 打赏
  • 举报
回复
打开数据库后要记得的关闭
ACCESS数据库是独占方式的,一个应用打开了,另外一个应用就无法打开了。
Rossetti 2003-07-19
  • 打赏
  • 举报
回复
DataSet ds = new DataSet("Members");//改写
MyDataGrid.DataBind();//去掉
老赵说高考 2003-07-19
  • 打赏
  • 举报
回复
再进行数据绑定以后,最好对数据库进行关闭操作。
MyConn.open()
MyAdapter.SelectCommand = cmd;
MyAdapter.Fill(ds,"Members");

MyDataGrid.DataSource = ds;
MyDataGrid.DataMember = "Members";
MyDataGrid.DataBind();
MyConn.close()
greystar 2003-07-19
  • 打赏
  • 举报
回复
MyConn.close()
把数据连接给关了。以前也好象遇到过这种事。
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2003-07-19 10:06
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。