jho*_*ton 22 .net c# sql ado.net
我有一个存储过程,其中有一个名为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;
}
Run Code Online (Sandbox Code Playgroud)
@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
Run Code Online (Sandbox Code Playgroud)
Aar*_*ron 47
尝试确保将命令类型设置为存储过程.
mycommand.CommandType = System.Data.CommandType.StoredProcedure;
Run Code Online (Sandbox Code Playgroud)
如果'userName'变量的值为null,则会出现此异常
如果null有效,则将"DBNull.Value"传递给db:
command1.Parameters.Add(new SqlParameter("@UserName", (userName ?? DBNull.Value));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19677 次 |
| 最近记录: |