当前位置: 首页 > 面试题库 >

SQL查询说未提供参数,但已将其添加到SqlCommand对象

卫鸿朗
2023-03-14
问题内容

我有一个存储过程,该过程具有一个名为UserName的参数,并且在我后面的代码中,我有一个SqlCommand对象,可以使用Add方法将参数添加到该对象中。但是由于某种原因,当命令对象尝试运行ExecuteReader方法时,它将引发异常。我完全不知所措,也不知道为什么它无法识别该参数。在运行ExecuteReader方法之前,我已经设置了一个断点,因此我可以确认命令对象确实包含正在设置的参数,这是正确的。我知道当参数未添加到命令对象中但在实际存储过程中进行了硬编码时,存储html" target="_blank">过程确实返回了正确的数据。下面是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;


 类似资料:
  • 问题内容: 在pgadmin3中,我想使用参数化查询(为了进行更快的调试,只需从我的php文件中复制并粘贴查询)。但是我还没有找到一个选项添加的价值观,…参数。是否有可能? 这是我正在循环中建立的查询,遵循从这里进行NULL测试的建议: 请注意,手动替换所有参数很繁琐,容易出错,并且可能(我希望)是不必要的。 提前致谢。 问题答案: 我只知道两种方式。 首先是要使用(PostgreSQL手册后的示

  • 问题内容: 我只是在阅读有关如何在.NET中向SqlCommand添加参数的问题,这对我提出了一个问题。在我的所有程序中,这就是我向命令中添加参数的方式: 我知道您也可以通过以下方式添加参数: 以下哪种添加参数的方法更好?有关系吗?我知道使用Sql名称空间对SQL Server查询更有效,所以我的第一个响应就是使用SqlParameter会更高效。但是,由于它已经是SqlCommand,所以我对此

  • 问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作

  • 问题内容: 使用Apache的commons-httpclient for Java,向GetMethod实例添加查询参数的最佳方法是什么?如果我使用的是PostMethod,则非常简单: 但是,GetMethod没有“ addParameter”方法。我发现这可行: 但是,我见过的大多数示例都将参数直接硬编码到URL中,例如: 或硬编码查询字符串,例如: 这些模式之一是首选吗?以及为什么Post

  • 我写了一个代码来管理一个咖啡馆,所以在框架中我添加了一个JTable,每次我从JComboBox中选择一个项目,它都应该显示在JTable中。为此,我添加了一个按钮,对于它的操作,我确保每次单击它时,它都将从JComboBox中单击的项存储在数据库中,然后将从数据库中获取的项存储在JTable中。但问题是JTable有两列,而JComboBox中的选择只有一列。因此,另一列必须从其他数据库调用,这

  • 问题内容: 我想添加表的两列值并按降序对其进行排序。例如: 考虑到上表,我想要一个SQL查询,它给我的结果如下: 是否有任何SQL查询来做到这一点? 问题答案: 没有用于这种水平聚合的内置函数,您可以执行以下操作: