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数据库中预置的账号和密码,点击登陆后显示
在没有任何数据时进行无效的读取尝试
求大神解答我错在哪了 谢谢了 展开
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数据库中预置的账号和密码,点击登陆后显示
在没有任何数据时进行无效的读取尝试
求大神解答我错在哪了 谢谢了 展开
2个回答
展开全部
你这个代码改下,这样写错误,输不出数据好不好,我的代码发给你,自己去改下,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语法
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语法
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询