c#连接sql数据库错误 :在没有任何数据时进行无效的读取尝试

以下是我做的一个点菜系统登陆界面的登陆按钮cilik事件代码Form3fop=newForm3();SqlConnectionmySqlConnection=newSql... 以下是我做的一个点菜系统登陆界面的登陆按钮cilik事件代码

Form3 fop = new Form3();

SqlConnection mySqlConnection = new SqlConnection();
mySqlConnection.ConnectionString = "data source=.;initial catalog=点菜系统数据库;Integrated Security=SSPI";

string cmdText ="select USER_PWD from 登录 where USER_NAME='"
+ textBox1.Text.ToString() + "'";

SqlCommand cmd = new SqlCommand(cmdText,mySqlConnection);

try
{
mySqlConnection.Open();
SqlDataReader dr = cmd.ExecuteReader();

if (dr[0].ToString() == textBox2.Text.ToString())
{
fop.Show();

}

dr.Close();
mySqlConnection.Close();
this.Close();
}
catch (Exception ex) { MessageBox.Show(ex.Message );}

结果调试的时候 输入正确的已在sql数据库中预置的账号和密码,点击登陆后显示
在没有任何数据时进行无效的读取尝试
求大神解答我错在哪了 谢谢了
展开
 我来答
笨笨小香猪
推荐于2016-11-22 · TA获得超过129个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:149万
展开全部
你这个代码改下,这样写错误,输不出数据好不好,我的代码发给你,自己去改下,2个登录页面
Console.Write("请输入注册帐号:");
string name = Console.ReadLine();
Console.Write("请输入密码:");
string password = Console.ReadLine();
using (SqlConnection conn = new SqlConnection(@"Data Source=wuxiang-pc;AttachDbFilename=|DataDirectory|Database1.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{ cmd.CommandText = "select *from admin where name=@name and password=@password";//这里不能拼接数据,拼接后有数据注入漏洞
cmd.Parameters.Add(new SqlParameter("name", name));
cmd.Parameters.Add(new SqlParameter("password", password));
int i = Convert.ToInt16(cmd.ExecuteScalar());
{
if (i > 0)
{
Console.WriteLine("登录成功!");
}
else
{
Console.WriteLine("密码和帐号错误!");
}
}
第二种数据连接,
/*Console.Write("请输入帐号:");
string name= Console.ReadLine();
Console.Write("请输入密码:");
string password = Console.ReadLine();
using (SqlConnection conn = new SqlConnection(@"Data Source=wuxiang-pc;AttachDbFilename=|DataDirectory|Database1.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select* from admin where name='"+name+"'";
SqlDataReader a = cmd.ExecuteReader();
if (a.Read())
{
string dbpassword = a.GetString(a.GetOrdinal("password"));
if (password == dbpassword)
Console.Write("登录成功!");
else
{
Console.Write("密码错误!");
}
}
else
{
Console.Write("帐号不存在!");
}
}*/
你上面代码是看国内书看多了写的代码是吗?
国内书代码有很多错误和漏洞,我这个是一个标准的登录页面写法,
那个conn.close()和try和catch不用写,使用Using来比那个好
using是释放资源。数据库继承了一个d什么接口,都可以用Using来代替
还有io的那些类都可以使用using 后面file类都可以用Using。他们和数据库一样
继承了那个d的接口,这些在c#高级编程里有介绍,他们书上没有try的catch语法
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友586e433
2011-11-16 · TA获得超过3491个赞
知道小有建树答主
回答量:1221
采纳率:0%
帮助的人:1425万
展开全部
if (dr[0].ToString() == textBox2.Text.ToString())
dr[0]要求sql至少返回一条数据.

先判断sql是否返回数据再访问dr[0],
if(dr.HasRows)
{
dr.Read();
if (dr[0].ToString() == textBox2.Text.ToString())
{
fop.Show();

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式