C#中我用查询条件语句查询一个表,然后显示在listview里面,语句如下,可是显示错误。我是菜鸟,求解

表设计表内容错误提示代码如下:privatevoidbutton1_Click(objectsender,EventArgse){using(SqlConnectionc... 表设计

表内容

错误提示
代码如下:
private void button1_Click(object sender, EventArgs e)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{

SqlCommand cmd = new SqlCommand("select * from 图书信息 where 图书名="+textBox1 .Text ,conn );
listView1.Items.Clear();

try
{
conn.Open();
SqlDataReader r = cmd.ExecuteReader();
while (r.Read())
{

listView1.Items.Add(string.Format("{0}{1}{2}{3}{4}{5}", r[0], r[1], r[2], r[3], r[4], r[5]));
}

r.Close();
}
catch (Exception err)
{
MessageBox.Show(err.Message, "查无此书");
}
}

}
展开
 我来答
百度网友154139e
2013-06-23 · TA获得超过413个赞
知道小有建树答主
回答量:295
采纳率:50%
帮助的人:250万
展开全部
看了一下,推断错误在字符串生成这里

SqlCommand cmd = new SqlCommand("select * from 图书信息 where 图书名="+textBox1 .Text ,conn );

原意是在图书信息这表里查询图书名这个字段,条件是由textBo1.Text来输入的,由于图书名这个字段类型是Text,字符串的比较查询要加'查询的内容'(单引号),所以改为
SqlCommand cmd = new SqlCommand("select * from 图书信息 where 图书名='" + textBox1 .Text
+ "'" ,conn );
注意"'"是两个双引号中间是个单引号。
追问

我修改了又出现新的错误




我局的是数据库设计出问题,但不知道怎么改

追答

出现这种类型不兼容,其实是你的SQL字符串问题,因为你使用的类型是Text,这个类型现在已经很少用了,这个类型不能用字符串的比较运算符来操作,就是常用的=;<>不能用于Text类型。


解决方法之一:

       把Text换成Varchar,Varchar(max)可以完全代替Text。这样你可以不用改字符串!

解决方法之二:

       如果你非要用Text类型,可以改一下查询字符串,使用Convert()或者Cast()将Text临时转成Varchar,写法有很多这只试给出一种:


SqlCommand cmd = new SqlCommand("select * from 图书信息 where Convert(Varchar, 图书名) = '" + textBox1 .Text + "'" ,conn );
传奇勇者
2013-06-23 · TA获得超过747个赞
知道大有可为答主
回答量:1706
采纳率:75%
帮助的人:806万
展开全部
有两种方式来排除错误:
一种是先不要where 条件,然后直接加条件,最后组合形成条件,这样一步一步来排除错误;
另一种是用F11跟踪,找到错误点修正,这是正规路子,但是要是不熟悉的话不如第一种方式来的快。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
疯狂小处男
2013-06-23 · 超过21用户采纳过TA的回答
知道答主
回答量:94
采纳率:0%
帮助的人:16.7万
展开全部
SqlCommand cmd = new SqlCommand("select * from 图书信息 where 图书名="+textBox1 .Text ,conn );
是这个查询语句写错了~ 应该是
SqlCommand cmd = new SqlCommand("select * from 图书信息 where 图书名='" + textBox1 .Text
+ "'" ,conn );
这是字符串拼接错误.我想好心提醒下你.这样会有一个注入式漏洞.只要.满足这个条件都会,进入/
纯手打..希望采纳!
追问

我修改了又出现新的错误


我局的是数据库设计出问题,但不知道怎么改

我修改了又出现新的错误




我局的是数据库设计出问题,但不知道怎么改

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c56cded
2013-06-23 · TA获得超过1940个赞
知道小有建树答主
回答量:870
采纳率:0%
帮助的人:248万
展开全部
string sql=string.Format("select * from 图书信息 where 图书名='{0}'",textBox1 .Text);
SqlCommand cmd = new SqlCommand(sql,conn );

你写的sql少了一对单引号;

追问

我修改了又出现新的错误

我局的是数据库设计出问题,但不知道怎么改

追答
将图书名字段的text类型修改为varchar类型就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式