【问题标题】:c# manually binding data to gridview via stored procedure + parameterc#通过存储过程+参数手动绑定数据到gridview
【发布时间】:2016-12-11 22:17:03
【问题描述】:

我遇到了错误

System.Data.SqlClient.SqlException:过程或函数“GetActiveComissions”需要参数“@param1”,但未提供。

在代码行da.Fill(dt) 上。当我尝试基于存储过程将数据绑定到我的 GridView 时,清楚地提供了参数。

代码:

ApplicationDbContext context = new ApplicationDbContext();
var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
string user = User.Identity.GetUserId();

string storedprocedure = "GetActiveComissions";
SqlConnection cn = GetSqlCon.GetCon();

DataTable dt = new DataTable();

SqlCommand cmd = new SqlCommand(storedprocedure, cn); 
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@param1", user);

SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);

GridViewActiveComissions.DataSource = dt;
GridViewActiveComissions.DataBind();

我会以错误的方式传递参数吗?

存储过程:

CREATE PROCEDURE [dbo].[GetActiveComissions]
    @param1 nvarchar(128)
AS
    SELECT 
        Comissions.CreationDate, Comissions.Accepted, 
        Comissions.BicycleModel, Comissions.BicycleType, 
        Comissions.YearOfAquisition, Comissions.Details, 
        AspNetUsers.WorkshopName 
    FROM 
        Comissions 
    INNER JOIN 
        AspNetUsers ON Comissions.WorkshopId = AspNetUsers.Id 
                    AND Comissions.Accepted = 1 
                    AND Comissions.ClientId = @param1
    RETURN 0

我已经单独测试了存储过程,如果提供了参数,它确实可以按预期工作。

【问题讨论】:

    标签: c# asp.net sql-server stored-procedures gridview


    【解决方案1】:

    从参数名中去掉'@',必须是这样的

    cmd.Parameters.AddWithValue("param1", user);
    

    【讨论】:

    • cmd.Parameters.Add("param1", user);
    • Comissions.ClientId、varchar 还是 INT?
    • 和那个一样。
    • 这是一个 nvarchar(128)
    • 检查“用户”的值,可能“用户”为空或为空
    猜你喜欢
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    相关资源
    最近更新 更多