asp.net c#ExecuteReader()错误
下面的代码生成一个错误。 当我直接在服务器上调用dbo.getit时,它工作得很好。错误发生在cmd.ExecuteReader()处。我做错了什么asp.net c#ExecuteReader()错误,c#,asp.net,executereader,C#,Asp.net,Executereader,下面的代码生成一个错误。 当我直接在服务器上调用dbo.getit时,它工作得很好。错误发生在cmd.ExecuteReader()处。我做错了什么 string user; string pw; SqlDataReader dr = null; SqlConnection conn = new SqlConnection("Data Source=xxx;Initial Catalog=myDB; Integrated Security=True");
string user;
string pw;
SqlDataReader dr = null;
SqlConnection conn = new SqlConnection("Data Source=xxx;Initial Catalog=myDB; Integrated Security=True");
user = Username.Text.Trim();
pw = Password.Text.Trim();
conn.Open();
try {
SqlCommand cmd = new SqlCommand("dbo.getit", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", user);
cmd.Parameters.AddWithValue("@param2", pw);
dr = cmd.ExecuteReader();
while ( dr.Read() )
{
Session["username"] = user;
// Session["admin"] =
// Session["completed"] =
Server.Transfer("all_is_well.aspx");
}
conn.Close();
conn.Dispose();
} catch (Exception ex) {
if (dr != null)
{
dr.Close();
conn.Close();
}
Server.Transfer("ERROR.aspx");
}
解决方案:
将上面的两个对应行替换为:
SqlCommand cmd = new SqlCommand("select * from dbo.getit(@param1, @param2);", conn);
cmd.CommandType = CommandType.text;
SqlCommand cmd = new SqlCommand("select * from dbo.getit(@param1, @param2);", conn);
cmd.CommandType = CommandType.text;
这似乎有点可疑
Session["username"] = user;
Server.Transfer("all_is_well.aspx");
在while循环中
您能否至少在读卡器上完成迭代,使用临时对象存储查询结果,然后初始化会话并执行
服务器.Transfer
这似乎有点可疑
Session["username"] = user;
Server.Transfer("all_is_well.aspx");
在while循环中
您能否至少在读卡器上完成迭代,使用临时对象存储查询结果,然后初始化会话并执行服务器.Transfer
Server.Transfer终止当前页面的执行,并开始执行当前请求的新页面。另外,传输调用End,它在完成时抛出ThreadAbortException异常
我认为您正在尝试做的(我的回答基于您正在尝试做的-不一定是最佳实践)是验证用户是否以某种方式基于数据存储进行了授权/身份验证。你最好不要使用ExecuteReader。使用。如果ExecuteScalar的结果不为null,则表示找到了该用户
if (cmd.ExecuteScalar() != null)
{
Server.Transfer("all_is_well.aspx");
}
else
{
Server.Transfer("someErrorPage.aspx");
}
Server.Transfer终止当前页面的执行,并开始执行当前请求的新页面。另外,传输调用End,它在完成时抛出ThreadAbortException异常
我认为您正在尝试做的(我的回答基于您正在尝试做的-不一定是最佳实践)是验证用户是否以某种方式基于数据存储进行了授权/身份验证。你最好不要使用ExecuteReader。使用。如果ExecuteScalar的结果不为null,则表示找到了该用户
if (cmd.ExecuteScalar() != null)
{
Server.Transfer("all_is_well.aspx");
}
else
{
Server.Transfer("someErrorPage.aspx");
}
解决方案:
将上面的两个对应行替换为:
SqlCommand cmd = new SqlCommand("select * from dbo.getit(@param1, @param2);", conn);
cmd.CommandType = CommandType.text;
SqlCommand cmd = new SqlCommand("select * from dbo.getit(@param1, @param2);", conn);
cmd.CommandType = CommandType.text;
成功了。解决方案:
将上面的两个对应行替换为:
SqlCommand cmd = new SqlCommand("select * from dbo.getit(@param1, @param2);", conn);
cmd.CommandType = CommandType.text;
SqlCommand cmd = new SqlCommand("select * from dbo.getit(@param1, @param2);", conn);
cmd.CommandType = CommandType.text;
成功了。错误是由错误引起的。更具体地说明错误,我们就可以更好地更具体地说明错误。。。aka,请阅读并编辑您的问题。通常,异常ex有一条消息和堆栈跟踪。。请设置断点,阅读并发布这些信息,以便找到错误原因。我无法在我使用的环境中使用断点。我将尝试以某种方式将错误打印到网页上。在服务器之前。传输在会话中保存异常,然后在错误中保存。aspx读取会话并提示错误..啊哈,伊曼纽尔,德克萨斯州。一旦你告诉我,似乎很明显。我看到它找不到存储过程。这很奇怪,因为我在几周前编写的这个程序的VB版本中使用了相同的sql。tx,我想我可以从这里找到答案。错误是由错误引起的。更具体地说明错误,我们就可以更好地更具体地说明错误。。。aka,请阅读并编辑您的问题。通常,异常ex有一条消息和堆栈跟踪。。请设置断点,阅读并发布这些信息,以便找到错误原因。我无法在我使用的环境中使用断点。我将尝试以某种方式将错误打印到网页上。在服务器之前。传输在会话中保存异常,然后在错误中保存。aspx读取会话并提示错误..啊哈,伊曼纽尔,德克萨斯州。一旦你告诉我,似乎很明显。我看到它找不到存储过程。这很奇怪,因为我在几周前编写的这个程序的VB版本中使用了相同的sql。tx,我想我可以从这里找到答案。不是服务器。已知传输会在while循环中抛出
ThreadAbortException
Agree,更糟糕的情况是OP会设置一个bool,指示userFound=true。然后在读卡器完成后,如果(userfind)执行服务器传输,那么在循环中执行服务器传输是相当麻烦的。我不认为这是问题所在:读卡器被执行了,但是在那里编写的代码没有被执行。。这只是测试程序的无用示例代码。由于ThreadAbortException可能导致各种意外情况,请避免Server.Transfer。也不是服务器。已知传输会在while循环中抛出ThreadAbortException
Agree,更糟的情况是OP可能会设置一个bool,指示userFound=true。然后在读卡器完成后,如果(userfind)执行服务器传输,那么在循环中执行服务器传输是相当麻烦的。我不认为这是问题所在:读卡器被执行了,但是在那里编写的代码没有被执行。。这只是测试程序的无用示例代码。由于ThreadAbortException可能导致各种意外情况,请避免Server.Transfer。考虑到我的出发点,我认为这是正确的方法;然而,这不是我的错误。由于某种原因,它给出了一个关于excecutescalar的错误。。。我现在正在试验不同的sql。问题的一部分是,我正在从使用工作完美的dataadapter(至少在vb中)切换到使用datareader。sql=“dbo.getit”;sql=“dbo.getit(@param1,@param2);”;sql=“select*from dbo.getit(@param1,@param2);”;等等。考虑到我的出发点,我认为这是正确的方法;然而,这不是我的错误。由于某种原因,它给出了一个关于excecutescalar的错误。。。我现在正在试验不同的sql。问题的一部分是,我正在从使用工作完美的dataadapter(至少在vb中)切换到使用datareader。sql=“dbo.getit”;sql=“dbo.getit(@param1,@param2);”;sql=“select*from dbo.getit(@param1,@param2);”;等