帮我看下代码问题出在哪?

awnu1988 2009-09-22 02:16:18

private void button1_Click(object sender, EventArgs e)
{
if (this.comboBox1.Text == "查询全部")
{
string ConnectionString = "Data Source=fly;user=fly;password=fly;";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
conn.Open();
int j = 0;
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from(select * from sms_alarm )";//在这儿写sql语句
OracleDataReader odr = cmd.ExecuteReader();//创建一个OracleDateReader对象
listView1.Items.Clear();
while (odr.Read())//读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了
{




listView1.Update();
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
listView1.Items[j].SubItems.Add(odr.GetString(2));
listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
listView1.EndUpdate();
j = j + 1;


}

}
else if(this.comboBox1.Text=="手机号码")
{
string ConnectionString = "Data Source=fly;user=fly;password=fly;";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
conn.Open();
int j = 0;
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select PHONE_NO,PHONE_AREA,SMS_CONTENT,ALARM_TIME,REPLY_SMS_CONTENT from sms_alarm where PHONE_NO='" + textBox1.Text + "' ";//在这儿写sql语句
OracleDataReader odr = cmd.ExecuteReader();//创建一个OracleDateReader对象
listView1.Items.Clear();
if (odr.HasRows)
{
while (odr.Read())//读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了
{


listView1.Update();
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
listView1.Items[j].SubItems.Add(odr.GetString(2));
listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
listView1.EndUpdate();
j = j + 1;


}
}
else
{
MessageBox.Show("没有该纪录!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Hand);
textBox1.Text = "";
}
}
else if (this.comboBox1.Text == "报警时间(0000-00-00 00:00:00)")
{
string ConnectionString = "Data Source=fly;user=fly;password=fly";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
conn.Open();
int j = 0;
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select PHONE_NO,PHONE_AREA,SMS_CONTENT,ALARM_TIME,REPLY_SMS_CONTENT from sms_alarm where ALARM_TIME='" + textBox1.Text + "' ";//在这儿写sql语句
OracleDataReader odr = cmd.ExecuteReader();//创建一个OracleDateReader对象
listView1.Items.Clear();
if (odr.HasRows)
{
while (odr.Read())//读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了
{



listView1.Update();
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
listView1.Items[j].SubItems.Add(odr.GetString(2));
listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
listView1.EndUpdate();
j = j + 1;




}
}
else
{
MessageBox.Show("没有该纪录!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
textBox1.Text = "";
}
}


else if (this.comboBox1.Text == "报警手机所在地")
{
string ConnectionString = "Data Source=fly;user=fly;password=fly";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
conn.Open();
int j = 0;
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select PHONE_NO,PHONE_AREA,SMS_CONTENT,ALARM_TIME,REPLY_SMS_CONTENT from sms_alarm where PHONE_AREA='" + textBox1.Text + "' ";//在这儿写sql语句
OracleDataReader odr = cmd.ExecuteReader();//创建一个OracleDateReader对象
listView1.Items.Clear();
if (odr.HasRows)
{
while (odr.Read())//读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了
{


listView1.Update();
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
listView1.Items[j].SubItems.Add(odr.GetString(2));
listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
listView1.EndUpdate();
j = j + 1;




}
}
else
{
MessageBox.Show("没有该纪录!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
textBox1.Text = "";
}
}
else if (this.comboBox1.Text == "报警内容关键字")
{
string ConnectionString = "Data Source=fly;user=fly;password=fly";//写连接串
OracleConnection conn = new OracleConnection(ConnectionString);//创建一个新连接
conn.Open();
int j = 0;
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "select PHONE_NO,PHONE_AREA,SMS_CONTENT,ALARM_TIME,REPLY_SMS_CONTENT from sms_alarm where SMS_CONTENT LIKE '%" + textBox1.Text + "%' ";//在这儿写sql语句
OracleDataReader odr = cmd.ExecuteReader();//创建一个OracleDateReader对象
listView1.Items.Clear();
if (odr.HasRows)
{
while (odr.Read())//读取数据,如果odr.Read()返回为false的话,就说明到记录集的尾部了
{



listView1.Update();
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
listView1.Items[j].SubItems.Add(odr.GetString(2));
listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
listView1.EndUpdate();
j = j + 1;


}
}
else
{
MessageBox.Show("没有该纪录!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
textBox1.Text = "";
}
}

}



这是一段模糊查询数据库方法的代码,我用全部查询时没问题,正常运行,可是当我用其它几种方式查时就会出错,像什么转换类型不对等等,可是明明就是和全部查询一样的代码怎么会出问题了呢,弄不明白,大家帮看看
...全文
162 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangjinlinok 2009-09-22
  • 打赏
  • 举报
回复
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView的Items集合好像只能添加listViewDataItem类型啊
jiangjinlinok 2009-09-22
  • 打赏
  • 举报
回复
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView的Items集合好像只能添加listViewDataItem类型啊
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
我给断了可是问题依然存在
lw476906635 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 jiangjinlinok 的回复:]
建议在每次执行完成之后把数据库连接断了去!!!
[/Quote]
不错 断点一下 应该是哪个数据类型没对应上 或者if判断有问题
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
listView1.Update();
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
listView1.Items[j].SubItems.Add(odr.GetString(2));
listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
listView1.EndUpdate();
j = j + 1;
我把类型说出来,麻烦大家帮我看看各应该用什么类型的
第一个是手机号码
第二个是报警手机所在地
第三个是短信内容
第四个是报警时间
第五个是回复短信内容
分别对应的我写的类型大家帮看下哪不对

jiangjinlinok 2009-09-22
  • 打赏
  • 举报
回复
建议在每次执行完成之后把数据库连接断了去!!!
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
可是你看一下,在全部查询里的代码和在下面的代码是一样的,可是为什么查询全部时就可以正常查询而且可以正常显示,可是一到用比如手机号码查询时就会报错呢
jiangjinlinok 2009-09-22
  • 打赏
  • 举报
回复
转换类型无效应该是你的ITEMS集合里面添加东西的类型有关系!
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tfpeixun 的回复:]
你看看你查出来的列顺序是不是一样的哟。select * from(select  * from sms_alarm );
select PHONE_NO,PHONE_AREA,SMS_CONTENT,ALARM_TIME,REPLY_SMS_CONTENT from sms_alarm where PHONE_NO='" + textBox1.Text + "' " 你后面的代码是按列顺序来取的。确保对应的列是不是对应的数据类型

listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
                        listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
                        listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
                        listView1.Items[j].SubItems.Add(odr.GetString(2));
                        listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
[/Quote]

位置都对
jiangjinlinok 2009-09-22
  • 打赏
  • 举报
回复
楼主我建议你不要用IF ELSEIF 这样的判断模式 还是直接用IF 这样 前者会出现一些想不到问题的!
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
手机号码那个里的这句说是指定的转换类型无效
tfpeixun 2009-09-22
  • 打赏
  • 举报
回复
你看看你查出来的列顺序是不是一样的哟。select * from(select * from sms_alarm );
select PHONE_NO,PHONE_AREA,SMS_CONTENT,ALARM_TIME,REPLY_SMS_CONTENT from sms_alarm where PHONE_NO='" + textBox1.Text + "' " 你后面的代码是按列顺序来取的。确保对应的列是不是对应的数据类型

listView1.Items.Add(odr.GetOracleString(1).ToString(), j);
listView1.Items[j].SubItems.Add(odr.GetInt32(3).ToString());
listView1.Items[j].SubItems.Add(odr.GetOracleString(7).ToString());
listView1.Items[j].SubItems.Add(odr.GetString(2));
listView1.Items[j].SubItems.Add(odr.GetOracleString(8).ToString());
jiangjinlinok 2009-09-22
  • 打赏
  • 举报
回复
那具体报的是那块的错?
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
代码其实很简单的,都是一部分一部分的,只不过是if else而矣,就是一个简单的查询,点确定后查询数据库内容...
jiangjinlinok 2009-09-22
  • 打赏
  • 举报
回复

不知道你报的是什么错误!不好下手你应该把你的错误信息截个图啊!或者说明下! 这样大家才能帮助你啊!
select * from (select * from sms_alarm)


这种写法是可以的 后面查出来是一张虚拟表 然后再查这张虚拟的表 说白了就是子查询!
tfpeixun 2009-09-22
  • 打赏
  • 举报
回复
自己debug一下吧。这么长的代码,要别人理解你的意思,还是要点时间
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
我就弄不明白,为什么第一个查询就好用,可是后面的几个都不好用,这是为什么?
wei322x 2009-09-22
  • 打赏
  • 举报
回复
很强悍!
awnu1988 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 diffmaker 的回复:]
select * from (select  * from sms_alarm)

有这种写法?
[/Quote]

不管有没有,可是它好用,而且能正常运行,出问题的是在下面
duanfengo7 2009-09-22
  • 打赏
  • 举报
回复
设个断点看看cmd.CommandText是什么,把它放在查询分析器里面运行了看看有什么问题...
加载更多回复(1)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧