您好我将值传递给SP参数时出现问题,内联查询工作正常。 我的任务是从dorpdownlist中选择多个项目并将其显示在gridview中。 当我从第一个下拉列表中选择值时,我有两个下拉列表,然后根据按钮单击时db的第一个下拉列表填充第二个下拉列表。
这是我到目前为止所做的,
protected void btnGetResult_Click(object sender, EventArgs e)
{
string selectedListValue = hdnSelections.Value;
if (!string.IsNullOrEmpty(selectedListValue))
{
string[] finalList = selectedListValue.TrimEnd(',').Split(',');
var parameters = new string[finalList.Length];
var cmd = new SqlCommand();
for (int i = 0; i < finalList.Length; i++)
{
if (!string.IsNullOrEmpty(finalList[i]))
{
parameters[i] = string.Format("@cardcode{0}", i);
cmd.Parameters.AddWithValue(parameters[i],finalList[i]);
}
}
cmd.CommandText = string.Format("Select cardcode, FirstName from
nonSAPcustomer where cardcode IN ({0})", string.Join(", ",
parameters));
// cmd.CommandText= string.Format("sp_nonSAPcustomer",
parameters);
cmd.Connection = Connection.con;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
lstBoxcities.DataSource = dt;
lstBoxcities.DataValueField = "cardcode";
lstBoxcities.DataTextField = "FirstName";
lstBoxcities.DataBind();
}
}
答案 0 :(得分:0)
您可以使用Table-Valued parameters。
首先,创建一个Type:
CREATE TYPE CardCodes AS TABLE ( CardCode INT);
然后,添加该类型的参数
CREATE PROCEDURE dbo.YourProc
@Codes CardCodes READONLY
AS
BEGIN
SELECT *
FROM FOO
WHERE ID IN(SELECT Code From @Codes)
END
然后使用发送值,虽然我认为还有其他配方,我使用DataTables:
var dataTable = new DataTable();
dataTable.Columns.Add("CardCode", typeof(int));
PopulateTable(dataTable);
cmd.Parameters.Add("@Codes", dataTable);