黑马程序员技术交流社区

标题: ADO.net 登录代码 错在哪儿了 [打印本页]

作者: 彭清贵    时间: 2013-2-20 15:08
标题: ADO.net 登录代码 错在哪儿了
本帖最后由 彭清贵 于 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();



这是数据库信息

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





作者: 马锋    时间: 2013-2-20 15:20
sql语句有问题吧..? 试试参数化查询..
作者: 王立    时间: 2013-2-20 15:24
本帖最后由 王立 于 2013-2-20 15:57 编辑

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

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

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

你用nvarchar(10)试试就没有空格了
作者: 郝滨    时间: 2013-2-20 15:27
去掉空格 Trim()一下
作者: 贾文泽    时间: 2013-2-20 15:33
nchar(10)  是可以储存10个字母或者汉字,不足长度情况下空格不弃, 你试试换成nvarchar类型试试,,
作者: 彭清贵    时间: 2013-2-20 15:44
王立 发表于 2013-2-20 15:24
char(10)   可以存10个字母 ,5个汉字,如果长度不够后面留空
Nchar(10)   10个汉字   留空 固定长度的Unicod ...

这就是我想要的啊 我试一下
作者: 彭清贵    时间: 2013-2-20 15:48
王立 发表于 2013-2-20 15:24
char(10)   可以存10个字母 ,5个汉字,如果长度不够后面留空
Nchar(10)   10个汉字   留空 固定长度的Unicod ...

也不行   
作者: 王立    时间: 2013-2-20 15:58
彭清贵 发表于 2013-2-20 15:48
也不行

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

真被你说中了
,以后的注意了  ,数据库字段类型的琢磨琢磨
非常感谢你     :#
作者: 管冉    时间: 2013-2-20 19:18
至今 ADO.net 字符串连接不上 貌似是我数据库安装出了问题 怎么弄都不行 彻底绝望 到黑马在去麻烦老师看看……




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2