我有一个存储过程,该过程具有一个名为UserName的参数,并且在我后面的代码中,我有一个SqlCommand对象,可以使用Add方法将参数添加到该对象中。但是由于某种原因,当命令对象尝试运行ExecuteReader方法时,它将引发异常。我完全不知所措,也不知道为什么它无法识别该参数。在运行ExecuteReader方法之前,我已经设置了一个断点,因此我可以确认命令对象确实包含正在设置的参数,这是正确的。我知道当参数未添加到命令对象中但在实际存储过程中进行了硬编码时,存储过程确实返回了正确的数据。下面是catch块中给出的异常消息。我还将粘贴我的代码和存储过程的第一部分。在此问题上的任何帮助,我将不胜感激,看到我尝试了许多不同的方法都无济于事。提前致谢。
过程或函数“ someStoredProcedure”需要未提供的参数“ @UserName”。
private DataTable GetLossMitData(string code, DateTime? start, DateTime? end) { DataTable results = new DataTable(); string connectionString = ConfigurationManager.ConnectionStrings["asdf"].ConnectionString; string userName = String.Empty; try { using (SPSite site = new SPSite(ConfigurationManager.AppSettings["someName"])) { using (SPWeb web = site.OpenWeb()) { userName = web.CurrentUser.Email.ToString(); } } using (SqlConnection connection1 = new SqlConnection(connectionString)) { connection1.Open(); using (SqlCommand command1 = new SqlCommand("someStoredProcedure", connection1)) { command1.Parameters.Add(new SqlParameter("@UserName", userName)); command1.Parameters.Add(new SqlParameter("@ProductCode", code)); SqlDataReader dr = command1.ExecuteReader(CommandBehavior.CloseConnection); results.Load(dr); } connection1.Close(); } } catch (Exception ex) { } return results; }
@UserName nvarchar(256), @ProductCode nvarchar(256), @StartDate nvarchar(256) = '1/1/1900', @EndDate nvarchar(256) = '12/30/2012' AS BEGIN SET NOCOUNT ON; Declare @UserID int Select @UserID = Users.UserID from Users where Users.Email = @UserName
尝试确保将命令类型设置为存储过程。
mycommand.CommandType = System.Data.CommandType.StoredProcedure;