新手求助登陆连接SQL

nycgwqd 2012-05-12 07:55:16
小弟新学,做了个简单的登陆界面,运行时出现错误,请帮忙解决。
protected void Button1_Click(object sender, EventArgs e)
{
if (this.TextBox2.Text != "")
{
if (this.TextBox1.Text != "")
{
string sql;
sql =string.Format( "select * from User where Name='" + this.TextBox2.Text.Trim()+ "' and PassWord='" + this.TextBox1.Text.Trim() + "'");
try
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["巡检系统数据库ConnectionString"].ConnectionString);
conn.Open();
SqlCommand cmd=new SqlCommand(sql,conn);
cmd.Connection = conn;
int state=Convert.ToInt32(cmd.ExecuteScalar());
if(state==0||state>1)
{
this.Label3.Text="用户不存在,请检测用户名和密码是否正确!";
}
else
{
this.Label3.Text="登录成功!";
}
conn.Close();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
else
{
this.Label3.Text = "请输入密码!";
}
}
else
{
this.Label3.Text = "请选择用户!";
}
}
}

运行程序,页面可以打开,输入用户名和密码后,点确定,提示如下

“/巡检系统”应用程序中的服务器错误。
--------------------------------------------------------------------------------

System.Data.SqlClient.SqlException: 关键字 'User' 附近有语法错误。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
在 System.Data.SqlClient.SqlDataReader.get_MetaData()
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
在 System.Data.SqlClient.SqlCommand.ExecuteScalar()
在 Login.Button1_Click(Object sender, EventArgs e)

这个是什么意思呀?

...全文
101 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-05-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

还是提示
System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。

谁有可用的代码,我想学学呀。新手悲催。。
[/Quote]
你的Name 和PassWord字段是不是设置的是Text类型,他是不能比较的。需要转换一下Convert, 或者把字段类型换成varchar或者nvarchar
nycgwqd 2012-05-12
  • 打赏
  • 举报
回复
OK了,谢谢大家了,是我在表定义的时候,Name和PassWord定义成Text了,现在改成了varchar(50)就好了,谢谢大家的帮助
nycgwqd 2012-05-12
  • 打赏
  • 举报
回复
还是提示
System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。

谁有可用的代码,我想学学呀。新手悲催。。
暖枫无敌 2012-05-12
  • 打赏
  • 举报
回复
肿么回事?多了个+

sql =string.Format( "select count(*) from [User] where [Name]='" + this.TextBox2.Text.Trim()+ "' and [PassWord]='" + this.TextBox1.Text.Trim() + "'");

=============>
sql =string.Format( "select count(*) from [User] where [Name]='{0}' and [PassWord]='{1}'",this.TextBox2.Text.Trim(),this.TextBox1.Text.Trim());
暖枫无敌 2012-05-12
  • 打赏
  • 举报
回复
sql =string.Format( "select count(*) from [User] where [Name]='" + this.TextBox2.Text.Trim()+ "' and [PassWord]='" + this.TextBox1.Text.Trim() + "'");

=============>
sql =string.Format( "select count(*) from [User] where [Name]='{0}' and [PassWord]='{1}'",this.TextBox2.Text.Trim(),this.TextBox1.Text.Trim()+ );
暖枫无敌 2012-05-12
  • 打赏
  • 举报
回复
protected void Button1_Click(object sender, EventArgs e)
{
if (this.TextBox2.Text != "")
{
if (this.TextBox1.Text != "")
{
string sql;
sql =string.Format( "select count(*) from [User] where [Name]='" + this.TextBox2.Text.Trim()+ "' and [PassWord]='" + this.TextBox1.Text.Trim() + "'");
try
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["巡检系统数据库ConnectionString"].ConnectionString);
conn.Open();
SqlCommand cmd=new SqlCommand(sql,conn);
cmd.Connection = conn;
int state=Convert.ToInt32(cmd.ExecuteScalar());
if(state==0||state>1)
{
this.Label3.Text="用户不存在,请检测用户名和密码是否正确!";
}
else
{
this.Label3.Text="登录成功!";
}
conn.Close();
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
}
}
else
{
this.Label3.Text = "请输入密码!";
}
}
else
{
this.Label3.Text = "请选择用户!";
}
}
}
dalmeeme 2012-05-12
  • 打赏
  • 举报
回复
改成:
sql =string.Format( "select count(*) from [User] where Name='" + this.TextBox2.Text.Trim()+ "' and PassWord='" + this.TextBox1.Text.Trim() + "'");
Fs_2011 2012-05-12
  • 打赏
  • 举报
回复
User表的架构是什么啊,先加上架构名试试,如果还是不行,可能是与sqlserver内部的关键字冲突了吧,改个名儿
nycgwqd 2012-05-12
  • 打赏
  • 举报
回复
按照上面的改了,又提示这样的错误。。。。

“/巡检系统”应用程序中的服务器错误。
--------------------------------------------------------------------------------

System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
在 System.Data.SqlClient.SqlDataReader.get_MetaData()
在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
在 System.Data.SqlClient.SqlCommand.ExecuteScalar()
在 Login.Button1_Click(Object sender, EventArgs e)
dalmeeme 2012-05-12
  • 打赏
  • 举报
回复
User可能是SQLSERVER内部使用的关键字,改成:
sql =string.Format( "select * from [User] where Name='" + this.TextBox2.Text.Trim()+ "' and PassWord='" + this.TextBox1.Text.Trim() + "'");

试试。

62,046

社区成员

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

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

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

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