我从存储过程中填充数据表,然后使用我的数据表填充数据集,但我得到的对象引用未设置为对象的实例"与ddl.DataSource = ds。
一致如何解决我的约束?
using (var scTyche = new SqlConnection(ConfigurationManager.ConnectionStrings["KondorConnectionConnectionString"].ConnectionString))
{
var ddl = (DropDownList)GridView1.FindControl("DropDownListFolders1");
var da = new SqlDataAdapter();
var dt = new DataTable();
var ds = new DataSet();
scTyche.Open();
var cmdTyche = scTyche.CreateCommand();
cmdTyche.CommandType = CommandType.StoredProcedure;
cmdTyche.CommandText = "dbo.spGetFolders";
cmdTyche.CommandTimeout = 60;
cmdTyche.Parameters.Add("@nBranchId", SqlDbType.Int).Value = intBranchId;
da.SelectCommand = cmdTyche;
da.Fill(dt);
ds.Tables.Add(dt);
ddl.DataSource = ds;
ddl.DataTextField = "strShort";
ddl.DataValueField = "nId";
ddl.DataBind();
cmdTyche.Parameters.Clear();
scTyche.Dispose();
scTyche.Close();
}
答案 0 :(得分:0)
我通常只是从适配器填充数据集。 ds包含一个表集合。根据存储过程返回的结果集的数量,这将反映在集合Tables [0],Tables [1]等中... 在您的情况下,我假设它只返回1.使用这种方法,您不需要添加的DataTable变量。
此外,dispose和close是多余的,因为using语句正是为了通过IDisposable接口处理它而设计的。
// example
da.Fill(ds);
if (ds.Tables.Count > 0)
{
ddl.Datasource = ds.Tables[0];
// etc....
}