数据源类型无效.它必须是IListSource、IEnumerable或IDataSource
本文关键字:IListSource IEnumerable IDataSource 类型 无效 数据源 | 更新日期: 2023-09-27 17:53:12
我有一个函数,得到一个下拉列表,应该运行一个存储过程,并得到一个供应商的名称,应该显示在下拉列表。
功能如下:
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
}