相关疑难解决方法(0)

存储过程或函数需要未提供的参数

我试图通过调用存储过程将数据插入SQL Server数据库,但我收到错误

过程或函数'SHOWuser'需要参数'@userID',这是未提供的.

我的存储过程被调用 SHOWuser.我已经彻底检查了它,没有参数丢失.

我的代码是:

public void SHOWuser(string userName, string password, string emailAddress, List<int> preferences)
{
        SqlConnection dbcon = new SqlConnection(conn);

        try
        { 
            SqlCommand cmd = new SqlCommand();

            cmd.Connection = dbcon;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.CommandText = "SHOWuser";

            cmd.Parameters.AddWithValue("@userName", userName);
            cmd.Parameters.AddWithValue("@password", password);
            cmd.Parameters.AddWithValue("@emailAddress", emailAddress);

            dbcon.Open();

            int i = Convert.ToInt32(cmd.ExecuteScalar());

            cmd.Parameters.Clear();
            cmd.CommandText = "tbl_pref";

            foreach (int preference in preferences)
            {
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(i));
                cmd.Parameters.AddWithValue("@preferenceID", Convert.ToInt32(preference));

                cmd.ExecuteNonQuery();
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            dbcon.Close();
        }
Run Code Online (Sandbox Code Playgroud)

并且存储过程是:

ALTER PROCEDURE …
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures

34
推荐指数
4
解决办法
14万
查看次数

SQL Query表示未提供参数,但会将其添加到SqlCommand对象中

我有一个存储过程,其中有一个名为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) …
Run Code Online (Sandbox Code Playgroud)

.net c# sql ado.net

22
推荐指数
2
解决办法
2万
查看次数

MVC 5实体框架6执行存储过程

我被卡住了.我有一个现有的应用程序,具有一个非常大的数据库和广泛的存储过程和函数库.我想要做的就是使用DbContext来执行存储过程并返回一组数据或映射到上下文中的一个实体.这是我在网上没有发现的神奇的东西吗?有人,有人,请帮忙.这是我到目前为止所得到的(并且它不会返回任何内容,结果为-1):

var contacts = db.Database.ExecuteSqlCommand("Contact_Search @LastName, @FirstName",
    new SqlParameter("@LastName", GetDataValue(args.LastName)),
    new SqlParameter("@FirstName", GetDataValue(args.FirstName)));
Run Code Online (Sandbox Code Playgroud)

执行该返回-1.我也尝试过这个效果,但没有成功:

DbRawSqlQuery<Contact> data = db.Database.SqlQuery<Contact>
                                   ("EXEC Contact_Search @LastName, @FirstName",
                                       GetDataValue(args.LastName), 
                                       GetDataValue(args.FirstName));
Run Code Online (Sandbox Code Playgroud)

我知道我可以添加一个edmx并映射到存储过程,但这不是首选方法.同样,我们的数据库包含近4.5亿条记录和一个包含近3,000个存储过程和函数的库.维持这将是一场噩梦.我是否正朝着正确的方向前进?实体框架是正确的选择吗?

asp.net-mvc stored-procedures entity-framework-6

4
推荐指数
1
解决办法
3万
查看次数