Asp.net 连接数据库时提示:列名无效

followingturing 2011-03-16 09:08:21
初学.net,今天连数据库,一直报“列名无效”的错。已经调了一个晚上,纠结啊~~
我用的环境:os: win xp sp3 ;
db: sq server2005
环境:visual studio 2005.

提示错误,我尝试过
1)核对db列名,无误。
2)sql语句用查询分析器执行,也正确。
3)看了网上N多帖子,有的说加' 或者 " ; 尝试良久,不成功。

忘各位赐解!!
代码:


protected void Button5_Click(object sender, EventArgs e)
{
SqlConnection MyConnection;
SqlCommand MyCommond;
SqlDataReader MyDataReader;
int iNum;

MyConnection = new SqlConnection();
MyConnection.ConnectionString = "server=(local);user id=sa;pwd=;database=AndXu";
MyConnection.Open();

MyCommond = new SqlCommand();
MyCommond.CommandText = "select * from UserInfo where [UserName]= @name and [UserSex]= @sex " ; //这句新修改的
MyCommond.CommandType = CommandType.Text;
MyCommond.Connection = MyConnection;
MyCommond.Parameters.Add("@name",Name.Text); //从这里设置关联

MyCommond.Parameters.Add("@sex",Sex.Text);

MyDataReader = MyCommond.ExecuteReader();

while (MyDataReader.Read())
{
for (int inum = 0; inum < MyDataReader.FieldCount; inum++)
{
AllSult.Text = MyDataReader[0].ToString()
+ MyDataReader[1].ToString()
+ MyDataReader[2].ToString()
+ MyDataReader[3].ToString();
}
}
MyDataReader.Close(); //Copy and don't know y.
MyConnection.Close();
}
...全文
3753 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
yao1071411950 2013-05-14
  • 打赏
  • 举报
回复
我今天做设计也遇到这个问题了,用单步调试也不容易看出其中的所在,我是用 response.write(要显示的变量名); response.end(); 你在你的出错代码处的每条语句下用这两句,看运行结果是否正确,我的问题是sql语句那输出的结果第一个字段的显示信息不是字符型的,但数据库定义的字段类型是字符的,你按照这种方法试试吧,希望对你有帮助!
cwzweize 2011-03-18
  • 打赏
  • 举报
回复
是不是sql语句 列名写错了。。。
孟子E章 2011-03-18
  • 打赏
  • 举报
回复
所以啊,不要怀疑计算机,计算机是不会说谎的
fabulous 2011-03-17
  • 打赏
  • 举报
回复
我有一次就是用存储过程一直提示好不到,数据库里的确有也执行了.结果..发现连错数据库了
truecoffeefox 2011-03-17
  • 打赏
  • 举报
回复
遇到过,那时是数据类型错误,sex用的bool值,传入的不是
不知道你是不是这情况
hyrg_ 2011-03-17
  • 打赏
  • 举报
回复
设个断点,把执行的sql语句复制到sql server 2005里面去执行下,看有错没得。
babywzazy 2011-03-17
  • 打赏
  • 举报
回复
有个这个问题,你之前是否 强制更改了数据库名或者字段名,比如右键重命名之类的。
虽然看上去 是没错,字段名一样。。你试试,或者新建一个数据库~各种解决办法都试。
Mr.小铭 2011-03-17
  • 打赏
  • 举报
回复
设断点调试。
amandag 2011-03-17
  • 打赏
  • 举报
回复
1. 看是否连接错了数据库
2. 有可能数据库设置了字段名必须大小写匹配
pandy_peng 2011-03-17
  • 打赏
  • 举报
回复
把你的sql语句放到数据库中执行下,看行不行,然后再确定哪点的错误。
wmx424 2011-03-17
  • 打赏
  • 举报
回复
设断点调试,复制sql语句到数据库运行,看有没错,一个个问题排除
小阳 2011-03-17
  • 打赏
  • 举报
回复
首先看看你MODel层有没有这个列名,就是说,这样修改一下
 MyCommond.CommandText = "select * from UserInfo where [UserName]= @username and  [UserSex]= @usersex "  ;    //这句新修改的         
MyCommond.CommandType = CommandType.Text;
MyCommond.Connection = MyConnection;
MyCommond.Parameters.Add("@username",Name.Text); //从这里设置关联

MyCommond.Parameters.Add("@usersex",Sex.Text);


还有,你看一下,就是断点调试的时候,在哪里出现问题???
liue_0612 2011-03-17
  • 打赏
  • 举报
回复
数据库字段发过来 看下
打酱油的 2011-03-17
  • 打赏
  • 举报
回复
直接到数据库查询.

select UserSex from UserInfo
有数据了再说.可能是你的列名使用了其他的别名引起的
lifusong890910 2011-03-17
  • 打赏
  • 举报
回复
select * from UserInfo where [UserName]= @name and [UserSex]= @sex 把参数换成数据 在sql2005中查询一下看对不对?
tony312ws 2011-03-17
  • 打赏
  • 举报
回复
MyCommond.CommandText = "select * from UserInfo where [UserName]= @name and  [UserSex]= @sex "  ;

改成
MyCommond.CommandText = "select * from UserInfo where [UserName]= "+@name+" and  [UserSex]= "+@sex+" "  ;
followingturing 2011-03-17
  • 打赏
  • 举报
回复
e....e..
对不起大家,问题解决了。说出来 我都不好意思了。。。

“我有两个数据库,下面有同一个表,其中我连的那个表恰没有UserSex 而是 UserLevel”

多谢大家的帮忙,问题终于明朗了。
不过我也学到不少,总结一下:
1.如果提示 列名无效,可能是
1)数据库连接错误。 改改语句试试,检查数据库连接。
2)sql错误。带回查询分析器试试。
3)(据楼上某仁兄说)可能是关键字命名冲突,也有可能。
4)可能是数据类型冲突。检查是否匹配。
照此顺序,依次检查,应该能找到症结。

2.再则,打印出类名看看是否正确:
for (int i = 0; i < MyDataReader.FieldCount; i++)
{
Response.Write(MyDataReader.GetName(i) + "<br>");
}也是好法。

谢谢大家的积极帮助,尤其是taomanman、net_lover 、 wxr0323 、 dzynihao 、 amandag的建议和思路,给了我很大启发,在此感谢大家~!

我会把这次错误总结到我的Blog,如下:
http://blog.csdn.net/followingturing/archive/2011/03/16/6254664.aspx

欣喜结贴。
CtrlJava 2011-03-17
  • 打赏
  • 举报
回复
sql 问题!
ZhuZhuYuXiang 2011-03-17
  • 打赏
  • 举报
回复
MyCommond.Parameters.Add("@name",Name.Text); //从这里设置关联

MyCommond.Parameters.Add("@sex",Sex.Text);

MyCommond.Parameters.Add(Value,SqlDbType)四种重载方法,没有上述所写的那样
应为:
MyCommond.Parameters.Add("@name").Value=Name.Text; //从这里设置关联

MyCommond.Parameters.Add("@sex").Value=Sex.Text;






amandag 2011-03-17
  • 打赏
  • 举报
回复
while (MyDataReader.Read())
{
for (int inum = 0; inum < MyDataReader.FieldCount; inum++)
{
AllSult.Text = MyDataReader[0].ToString()
+ MyDataReader[1].ToString()
+ MyDataReader[2].ToString()
+ MyDataReader[3].ToString();
}
}
==
这个for循环应该没意义

改成
 

while (MyDataReader.Read())
{

AllSult.Text += MyDataReader[0].ToString()
+ MyDataReader[1].ToString()
+ MyDataReader[2].ToString()
+ MyDataReader[3].ToString();

}
加载更多回复(21)
思若B2B.Net电子商务网网站管理系统是一套仿阿里巴巴,慧聪360等网站的互联网网站管理系统,系统采用微软ASP.Net2.0开发,数据库采用微软SQLSERVER,同支持ACCESS,SQL7.0,SQL2000,SQ2005。 1、无人执守生成。生成静态HTML,现在大部分系统都生成HTML,而思若问答系统独创无人执守HTML文件生成。网站无人执守生成与其它系统不同在于,其它的系统需要打开生成页面来定,而思若B2B的无人执守是一种完全自动化的生成。解决传统的网站需要为生成花费大量的间的问题。生成每生成10条信息,自动暂定,解决系统资源的占用问题。 2、强大的函数标签管理功能。系统提供各种数据表的标签调用,调用可设置各种参数,如显示的CSS,调用的条数,列数等,让你轻松构建自己的显示模式,同,基于同一个标签,支持纯静态静态模板的调用,支持ASPX的调用和支持远程JS调用。标签不写入数据表,不通过数据表来进行读取,以提高网站的运行效果和效率。 3、独创动态标签创建功能。同支持两种语言的开发接口,只要你会ASP或ASP.net的任何一种语言,你都可以在后台的动态标签管理里开发出自己的新的程序功能或模块。 4、模板与程序完全独立。前台所有的功能及显示,都可以通过系统自带的函数标签和系统标签来调用。 5、系统支持静态,动态,假静态。让你的虚拟主机也能轻松运行。 6、独创文章频道可扩展功能。文章频道可复制。让你轻松构架自己的各种资讯新闻频道。 7、独创二级域名支持。系统同提供了二级域名组件,让你的收费和户可以通过二级域名进行访问,同,可在后台轻松定制会员站点模板,以提高网站的运营亮点。 8、独创网页聊天功能。思若B2B.net继续保留ASP版本的即通讯功能,并在原版本的基础上进行了大量改进。真正实现客户的网络即商务。 9、完整的解决方案。作为B2B电子商务网站管理系统,我们同也运营着B2B电子商务网站,站在营销的角度来提出技术解决方案,或许,我们的系统更适合于你的运营。 10、强大的功能,稳定的性能,安全的系统。    20081030版更新说明:   1、修改了企业用户修改支付方式“无法为更新定位行。”的错误。   2、完善了企业模板标签,提供完整的20套模板,从而解决了企业用户不能生成的问题。   3、改正了部分用户生成文章为0字节的问题   4、修复了发布商业机会广告的BUG   5、修复了修改广告位“[Microsoft][ODBC SQL Server Driver][SQL Server]列名 'False' 无效。”的BUG   6、修复了分类信息审核、管理、删除提示参数错误的问题   7、修复了添加和管理分类信息的分类的问题   8、修复了用户修改产品分类的BUG   9、解决了部分免费版用户不能修改行业积分的问题。   10、其它已经BUG

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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

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