ASP.NET C#:带有存储过程和参数的SqlDataSource

时间:2013-06-19 09:24:07

标签: c# asp.net sqldatasource

我正在尝试使用存储过程和参数以编程方式编写SqlDataSource。后来我想将这个SqlDataSource作为数据源分配给列表框。但是我收到的错误是存储过程需要一个未提供的参数。我不明白为什么它提供给我错误,尽管提供它。

我使用的代码如下:

sqlDS = new SqlDataSource();
sqlDS.ConnectionString = DC.ConnectionString;
sqlDS.SelectCommandType = SqlDataSourceCommandType.StoredProcedure;
sqlDS.SelectParameters.Add("@aPara_Name", TypeCode.String, aPara_Value);
sqlDS.SelectParameters[0].Direction = ParameterDirection.Input;
sqlDS.SelectCommand = "usp_StoredProcedure_1";
sqlDS.DataBind();
this.Controls.Add(sqlDS);

Listbox1.DataSource = sqlDS;
Listbox1.DataTextField = "Title";
Listbox1.DataValueField = "Value";
Listbox1.DataBind();   //this is where I get the error saying that stored procedure requires a parameter that wasn't passed!

有人可以指导我出错的地方吗?

3 个答案:

答案 0 :(得分:0)

你能尝试这种方法吗?

                var com = new SqlConnection(DC.ConnectionString).CreateCommand();
                com.CommandType = CommandType.StoredProcedure;
                com.CommandText = @"usp_StoredProcedure_1";
                com.Parameters.Add("@aPara_Name", SqlDbType.VarChar, 20).Value = aPara_Value;

                var table = new DataTable();

                new SqlDataAdapter(com).Fill(table);

                Listbox1.DataSource = table;

答案 1 :(得分:0)

我遇到了完全相同的问题,最后得到了答案。 只需在“SelectParameters.Add()”方法中声明参数时不插入“@”符号即可。因此,您所要做的就是更改以下行:

sqlDS.SelectParameters.Add("@aPara_Name", TypeCode.String, aPara_Value);

为:

sqlDS.SelectParameters.Add("aPara_Name", TypeCode.String, aPara_Value);

希望这有帮助。

答案 2 :(得分:0)

我同意@kumbaya。 面对同样的问题。删除了@,它工作正常。

第4行的代码应编辑为

sqlDS.SelectParameters.Add("aPara_Name", TypeCode.String, aPara_Value);