【发布时间】:2012-06-27 17:31:17
【问题描述】:
我想在 c# 中使用存储过程。我在 sql server 中创建存储过程,并在程序中调用它。但是当我使用断点功能时,我知道由于断点跳过了循环,因此没有从数据库中检索数据。..
.aspx 代码:
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="store" />
<asp:Label ID="Label9" runat="server" Text="Label"></asp:Label>
c#代码:
public void store(object sender, EventArgs ser)
{
try
{
// c reate and open a connection object
SqlConnection conn = Class3.GetConnection();
// 1. create a command object identifying the stored procedure
SqlCommand cmd = new SqlCommand("storeprocedure3", conn);
// 2. set the command object so it knows to execute a stored procedure
cmd.CommandType = CommandType.StoredProcedure;
// 3. add parameter to command, which will be execute the command
SqlDataReader rdr = cmd.ExecuteReader();
// iterate through results, printing each to console
while (rdr.Read())
{
Label9.Text = rdr["menuename"].ToString();
}
}
catch (Exception sa)
{
Console.WriteLine(sa);
}
}
存储过程:
CREATE PROCEDURE procedure3
AS
BEGIN
select menuename from menue;
END
GO
【问题讨论】:
-
如果您直接对数据库运行存储过程,例如在 Sql Management Studio 中,它是否会返回数据?
-
我注意到您为属性分配了一个标量值:Label9.Text= rdr["menuename"].ToString();您应该考虑使用 cmd.ExecuteScalar() 而不是 cmd.ExecuteReader() 以防您从存储过程中检索单个值
-
- 是否发生异常? (提示:
Console.WriteLine在 Web 应用程序中不是很有用) - 连接是否以正确的用户身份执行? (from menue不明确 - 这取决于用户) - 这是什么时候运行的?还;需要更多using... -
您是否尝试过直接针对数据库运行您的过程(使用 Sql Server Management Studio)来查看它是否真的返回任何行?此外,在 ASP.Net 项目中使用 Console.WriteLine 有点没用,请确保在您的 catch 子句中放置一个断点以查看是否发生任何异常,然后找到更好的方法来处理您的异常。
标签: c# sql .net tsql stored-procedures