我有一个获取DropDownList的函数,应该运行一个存储过程并返回一个Supplires名称taht应该显示在dropdownlsit。
这是功能:
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
当我运行该程序时,它会抛出一个错误:
System.InvalidOperationException:数据源是无效类型。它 必须是IListSource,IEnumerable或IDataSource。
答案 0 :(得分:0)
您无法指定ddl.DataSource = sqlComm
,因为它是SqlCommand。
填写DataSet
并指定
ddl.DataSource = dsMyResult;
答案 1 :(得分:0)
您尝试将SqlCommand
的实例直接分配到DataSource
:
ddl.DataSource = sqlComm;
我不确定这是否是一个错字或您认为它会自动运行存储过程并将结果分配给控件,但它不会起作用。
另外,ExecuteNonQuery()
不是正确的调用方法,如果您想要获取记录。请尝试ExecuteReader()
:
var reader = sqlComm.ExecuteReader();
while (reader.Read())
{
// Do something with the data
}