A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭清贵 中级黑马   /  2013-2-20 15:08  /  2632 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 彭清贵 于 2013-2-20 23:24 编辑

问题简化了  就是为什么dbpasswors返回的是一个“123       ”后面有空格  我把类型改成nvarchar(10)也还是返回的“123       ”


这是代码
Console.WriteLine("请输入用户名");
            string a = Console.ReadLine();
            Console.WriteLine("请输入密码");
            string b = Console.ReadLine();
            using (SqlConnection coon = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=E:\C#程序\第二阶段\第二阶段\登录程序\user.mdf;Integrated Security=True"))
            {
                coon.Open();
                using(SqlCommand cmd=coon.CreateCommand())
                {
                    cmd.CommandText = "select * from tuse1 where username='"+a+"'";
                    using (SqlDataReader reader=cmd.ExecuteReader())
                    {
                        if(reader.Read())
                        {
                            string dbpasswrod = reader.GetString(reader.GetOrdinal("passwors"));
                            if (dbpasswrod == b)//调试在这里发现b="123",而dbpasswors="123       ",显然后面出了空格符,数据库类型是nchar(10),视频上老师的都没问题 ,纠结了 ,又试了下,我如果密码输入“123       ” 这样是10个字符,登录成功,是我的类型设置的不对吗,用户名也是同类型 怎么不报错
                            {
                                Console.WriteLine("登录成功");
                            }
                            else
                            {
                                Console.WriteLine("密码错误");
                            }
                        }
                        else
                        { Console.WriteLine("用户名错误"); }
                    }
                }
            }
            Console.WriteLine("测试过");
            Console.ReadKey();



这是数据库信息

代码没问题 ,执行时 用户名没问题,密码老是错误   ,看了半天也没找到哪儿出问题了




10 个回复

倒序浏览
sql语句有问题吧..? 试试参数化查询..
回复 使用道具 举报
本帖最后由 王立 于 2013-2-20 15:57 编辑

char(10)   可以存10个字母 ,5个汉字,如果长度不够后面留空
Nchar(10)   10个汉字   留空 固定长度的Unicode编码

Varchar(10)  10个字母 ,5个汉字 长度可以变化
nvarchar(10)  10个汉字,长度可以变化

你用的nchar(10)  后面会自动有空格填补

你用nvarchar(10)试试就没有空格了
回复 使用道具 举报
去掉空格 Trim()一下
回复 使用道具 举报
nchar(10)  是可以储存10个字母或者汉字,不足长度情况下空格不弃, 你试试换成nvarchar类型试试,,
回复 使用道具 举报
王立 发表于 2013-2-20 15:24
char(10)   可以存10个字母 ,5个汉字,如果长度不够后面留空
Nchar(10)   10个汉字   留空 固定长度的Unicod ...

这就是我想要的啊 我试一下
回复 使用道具 举报
王立 发表于 2013-2-20 15:24
char(10)   可以存10个字母 ,5个汉字,如果长度不够后面留空
Nchar(10)   10个汉字   留空 固定长度的Unicod ...

也不行   
回复 使用道具 举报
王立 中级黑马 2013-2-20 15:58:45
8#
彭清贵 发表于 2013-2-20 15:48
也不行

测试下,发现nchar(10)改成nvarchar(10)后原来遗留的空格继续存在,你或者手工去除掉,或者新添加几条数据,新数据就不会再有空格了
回复 使用道具 举报
首先你要检查你的b变量,如果是b 多了空格就把b.tirmend();如果是数据库取出来多空格,你就把dbpassword.trimend();如果你非不要这么做,你检查检查你数据库是不是录入数据时候多打了空格。。。。。。。嘿嘿被我言中了吧·················
回复 使用道具 举报
zhiaijingming 发表于 2013-2-20 16:09
首先你要检查你的b变量,如果是b 多了空格就把b.tirmend();如果是数据库取出来多空格,你就把dbpassword.tr ...

真被你说中了
,以后的注意了  ,数据库字段类型的琢磨琢磨
非常感谢你     :#
回复 使用道具 举报
至今 ADO.net 字符串连接不上 貌似是我数据库安装出了问题 怎么弄都不行 彻底绝望 到黑马在去麻烦老师看看……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马