数据源类型无效.它必须是IListSource、IEnumerable或IDataSource



我有一个函数,得到一个下拉列表,应该运行一个存储过程,并得到一个供应商的名称,应该显示在下拉列表。

功能如下:

public void LoadSuppliers(DropDownList ddl , int num)
{
    con = connect("igroup9_test1ConnectionString");
    using (SqlCommand sqlComm = new SqlCommand("[spGetSuppliers]", con))
    {
        if (con.State != ConnectionState.Open)
        {
            con.Open();
        }
        try
        {
            sqlComm.CommandType = CommandType.StoredProcedure;
            sqlComm.Parameters.AddWithValue("@RowMeterialID ", num);
            sqlComm.CommandTimeout = 600;
            ddl.DataSource = sqlComm;
            sqlComm.ExecuteNonQuery();
            ddl.DataBind();
            ddl.DataTextField = "sName";
            ddl.DataValueField = "sName";
        }
        catch (Exception ex)
        {
            throw (ex);
        }
    }
}

步骤如下:

USE [igroup9_test1]
GO
/****** Object:  StoredProcedure [dbo].[spGetSuppliers]    Script Date: 03/24/2014 18:13:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[spGetSuppliers]
(
@RowMeterialID int
)
as
begin
select distinct sName
from Supplier, RawMaterials, SupplierRawMaterials
where RawMaterials.rmID=@RowMeterialID and RawMaterials.rmID=SupplierRawMaterials.rmID and SupplierRawMaterials.SupplierID=Supplier.SupplierID
end

当我运行程序时,它抛出一个错误:

系统。InvalidOperationException:数据源是无效类型。它必须是IListSource、IEnumerable或IDataSource。

不能分配ddl.DataSource = sqlComm,因为它是SqlCommand。

填充DataSet并赋值

ddl.DataSource = dsMyResult;

您试图将SqlCommand的实例直接分配给DataSource:

ddl.DataSource = sqlComm;

我不确定这是一个打字错误,还是你认为它会自动运行存储过程并将结果分配给控件,但它不会工作。

此外,ExecuteNonQuery()不是正确的方法调用,如果你想得到记录回来。试试ExecuteReader():

var reader = sqlComm.ExecuteReader();
while (reader.Read())
{
    // Do something with the data
}

最新更新