请大家帮我看看我应该怎么改

chinahero83 2009-03-27 03:29:44
我用一个web form做为用户登录的界面,当用户输入ID和密码时,就调用SQL Server的一个stored procedure来验证Customer表中是否存在这个用户ID和密码。如果存在的话,就从这个用户登陆的web form跳转到第二个web form.

我现在的问题是当我点击了button按钮以后,web窗体不会跳转到第二个web窗体,请大家帮我看看应该怎么改

我的代码如下:

public partial class MainPage : System.Web.UI.Page 
{
private SqlConnection conn = new SqlConnection("Integrated Security= true;Initial Catalog=RoadsideMart;Data Source=huyufeng;");

protected void Page_Load(object sender, EventArgs e)
{
if (conn.State == ConnectionState.Closed)
conn.Open();
}


protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
if (conn.State == ConnectionState.Closed)
conn.Open();

string sqlStr = "exec sp_validateUser ";

sqlStr += Username.Text + ", \'" + Password.Text + "\'";

SqlCommand cmd = new SqlCommand(sqlStr, conn);

int rtValue = (int)cmd.ExecuteScalar();

if (rtValue == 1)
{
Server.Transfer("Default2.aspx");
}
}
}



对应的stored procedure叫sp_validateUser,代码如下:
Create procedure sp_validateUser

@userId int,
@inputPassword varchar(6)

AS

begin
declare @userIdChar varchar(30)

set @userIdChar = @userId

declare @rtValue int

if( @userIdChar = '')
set @rtValue = 0
else
begin
select @rtValue = 1 from Customer where ID = @userIdChar AND password = @inputPassword

if (@rtValue <> 1)
set @rtValue = 0
end

return @rtValue
end




我估计问题应为我没写button按钮的click事件,但是我不知道该怎么改好,请大家帮我看看吧,谢谢了。
...全文
98 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinahero83 2009-03-28
  • 打赏
  • 举报
回复
感谢所有的好朋友,给了我这么多建议和帮助。

看了大家的回复之后,我的问题也得到圆满解决了,再次感谢大家了。我就把分数给对我启发最大,帮助最大的朋友们了。

特别感谢pt1314917,wojiaochenglong的建议,对我帮助真的很大,还要感谢下jijunwu,你的回答也真是一针见血,总之再次感谢大家了。
踏雪听雨 2009-03-28
  • 打赏
  • 举报
回复

强烈建议,跟踪调试,什么过程都能自己掌控
boyboyboyboy 2009-03-28
  • 打赏
  • 举报
回复
帮顶
wojiaochenglong 2009-03-28
  • 打赏
  • 举报
回复
那就写一个方法,放在 button_click事件中,搜索+判断,自定义验证控件里面不需要加什么,只在上述函数中对他赋一个值就行了
试试吧...
wojiaochenglong 2009-03-28
  • 打赏
  • 举报
回复
button里面就是执行sql语句找到@rtValue的值,自定义验证控件紧接着根据检索出的@rtValue给出提示信息,你是想这样做吗?

chinahero83 2009-03-28
  • 打赏
  • 举报
回复
谢谢大家给我的意见,我很想知道,那在我这个程序里,自定义验证控件和Button空间里各自应该写什么才比较合理呢。因为我希望如果后台的customer表里没有这个用户的话,可以在web form里,自定义验证控件会显示“该用户不存在”这样的信息。
路人乙e 2009-03-27
  • 打赏
  • 举报
回复
Username.Text 是INT类型吗
a6252224 2009-03-27
  • 打赏
  • 举报
回复
直接写click事件
  • 打赏
  • 举报
回复
因为你获取的首行首列 rtValue 的值不为1
pt1314917 2009-03-27
  • 打赏
  • 举报
回复

//第二点,你应该是点按钮时进行登陆,可你现在把方法竟然写在自定义验证控件的后台方法中。。。

pt1314917 2009-03-27
  • 打赏
  • 举报
回复

--且不说别的,你的程序里面调用存储过程用的方法是返回首行首列,那么你的存储过程就不能像现在这样写:
Create procedure sp_validateUser

@userId int,
@inputPassword varchar(6)

AS

begin
declare @userIdChar varchar(30)

set @userIdChar = @userId

declare @rtValue int

if( @userIdChar = '')
set @rtValue = 0
else
begin
select @rtValue = 1 from Customer where ID = @userIdChar AND password = @inputPassword

if (@rtValue <> 1)
set @rtValue = 0
end

select @rtValue --这里应该改成这样``
end
宝_爸 2009-03-27
  • 打赏
  • 举报
回复
visual studio比较牛的地方是可以trace into的stored procedure.

参考:
How to: Enable SQL Server Debugging
http://msdn.microsoft.com/en-us/library/09x4a6at(VS.80).aspx
宝_爸 2009-03-27
  • 打赏
  • 举报
回复
调用stored procedure一般都是这样的:

SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");

SqlCommand salesCMD = new SqlCommand("SalesByCategory", nwindConn);
salesCMD.CommandType = CommandType.StoredProcedure;

SqlParameter myParm = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15);
myParm.Value = "Beverages";

nwindConn.Open();

SqlDataReader myReader = salesCMD.ExecuteReader();


另外设置个断点跟踪一下就什么都知道了。
hecong875 2009-03-27
  • 打赏
  • 举报
回复
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) 还有你这个事件应该是 button的事件吧?
{
if (conn.State == ConnectionState.Closed)
conn.Open();

string sqlStr ="";
sqlStr = "select count(*)from a where Username ='"+Username.Text + "' and Password= '" + Password.Text + "'";

SqlCommand cmd = new SqlCommand(sqlStr, conn);

int rtValue = (int)cmd.ExecuteScalar();

if (rtValue == 1)
{
Server.Transfer("Default2.aspx");
}
}
}
hecong875 2009-03-27
  • 打赏
  • 举报
回复
public partial class MainPage : System.Web.UI.Page
{
private SqlConnection conn = new SqlConnection("Integrated Security= true;Initial Catalog=RoadsideMart;Data Source=huyufeng;");

protected void Page_Load(object sender, EventArgs e)
{
if (conn.State == ConnectionState.Closed)
conn.Open();
}


protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
if (conn.State == ConnectionState.Closed)
conn.Open();

string sqlStr ="";
sqlStr = "select count(*)from a where Username ='"+Username.Text + "' and Password= '" + Password.Text + "'";

SqlCommand cmd = new SqlCommand(sqlStr, conn);

int rtValue = (int)cmd.ExecuteScalar();

if (rtValue == 1)
{
Server.Transfer("Default2.aspx");
}
}
}
isgoodtime 2009-03-27
  • 打赏
  • 举报
回复
更正下,俺看错了,跟参数没关系,不好意思
isgoodtime 2009-03-27
  • 打赏
  • 举报
回复
你调用存储过程时连参数都没给传过去,你其它的再正确他也不会跳转的,你不传参数人家数据库知道你要查哪个用户呢

62,268

社区成员

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

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

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

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