为什么这句正确的SQL语句放到C#里边就什么都搜索不到呢?

caofei277 2009-03-04 08:07:46
下边是源码,这个方法是填充列表视图(LIstView)的,但是本来是有信息的,但是查询却总是查询不到,提示没有信息,但是sql语句又没有错误,我不知道是哪里错了,程序也没报错,只是查不到信息,但是用这段sql语句在数据库直接使用,就可以进行查询
private void FillListView()
{
string wordName; //单词
string wordMean; //词义
int wordListId; //所属单词表的Id
try
{
//查找单词的sql语句
string sql = string.Format("SELECT WordName,WordMean,WordId FROM Word WHERE WordListId = (SELECT SWordListId FROM WordList WHERE SWordListName LIKE '%{0}%') AND WordName LIKE '%{1}%'",cboWordList.Text,txtWordName);



//创建Command对象
SqlCommand command = new SqlCommand(sql,DBHelper.connection);

DBHelper.connection.Open(); //打开连接数据库

SqlDataReader dataReader = command.ExecuteReader(); //执行查询命令

lvWord.Items.Clear(); //清楚ListView中的所有项

if (!dataReader.HasRows)
{
MessageBox.Show("抱歉,没有找到您要找的单词!", "结果提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
//将查询到的结果循环写到ListView中
while (dataReader.Read())
{
//将从数据库中读取的单词、词义、单词所在表赋给相应的变量
wordName = (String)dataReader["WordName"];
wordMean = (String)dataReader["WordMean"];


//创建一个ListView项
ListViewItem lviWord = new ListViewItem(wordName);
//将ID放在Tag中
lviWord.Tag = (int)dataReader["WordId"];
//向ListView中添加一个新项
lvWord.Items.Add(lviWord);
lviWord.SubItems.AddRange(
new string[] {wordMean});

} //while 结束

} //else结束

dataReader.Close(); //关闭数据库连接

} //try结束


catch (Exception ex)
{
MessageBox.Show("查询数据库出错!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
Console.WriteLine(ex.Message);
}
finally
{
DBHelper.connection.Close(); //关闭数据库连接
}
} //FillListView方法结束
...全文
157 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaolei477 2009-03-04
  • 打赏
  • 举报
回复
txtWordName 应该是控件的text啊 txtWordNam.Text
烈火蜓蜻 2009-03-04
  • 打赏
  • 举报
回复
SELECT WordName,WordMean,WordId FROM Word WHERE WordListId = (SELECT TOP 1 SWordListId FROM WordList WHERE SWordListName LIKE '%{0}%') AND WordName LIKE '%{1}%'",cboWordList.Text,txtWordName

这里不加TOP 1的话,当你的结果多于一个时,肯定就出错了
烈火蜓蜻 2009-03-04
  • 打赏
  • 举报
回复
string sql = string.Format("SELECT WordName,WordMean,WordId FROM Word WHERE WordListId = (SELECT SWordListId FROM WordList WHERE SWordListName LIKE '%{0}%') AND WordName LIKE '%{1}%'",cboWordList.Text,txtWordName);


如果 txtWordName 是TextBox的话,就要txtWordName.Text,不过我想应该不会犯这种错误吧?

你的语有非常可能会出错

SELECT WordName,WordMean,WordId FROM Word WHERE WordListId =
(SELECT TOP 1 SWordListId FROM WordList WHERE SWordListName LIKE '%{0}%') AND WordName LIKE '%{1}%'",cboWordList.Text,txtWordName
bluelive 2009-03-04
  • 打赏
  • 举报
回复
先response.write出SQL的字符串,拷贝到sql server中直接运行,看看是否可以通过,可以的话,再往下调试下去。
relive_qiankai 2009-03-04
  • 打赏
  • 举报
回复
Ls两位讲的对..
shiboss 2009-03-04
  • 打赏
  • 举报
回复
你那{1}对应的是控件ID啊 txtWordName
应该是控件的text啊 txtWordNam.Text
linlin1972 2009-03-04
  • 打赏
  • 举报
回复
string sql = string.Format("SELECT WordName,WordMean,WordId FROM Word WHERE WordListId = (SELECT SWordListId FROM WordList WHERE SWordListName LIKE '%{0}%') AND WordName LIKE '%{1}%'",cboWordList.Text,txtWordName);

应该是txtWordNam.Text吧?

:-)
Grave_rain 2009-03-04
  • 打赏
  • 举报
回复
对, txtWordNam 放那的话是一长串的控件地址,要加.text
aisini_an 2009-03-04
  • 打赏
  • 举报
回复
学习一下.

111,126

社区成员

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

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

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