如何解决‘Fill: SelectCommand.Connection属性未初始化’错误
问题:Fill: SelectCommand.Connection property has not been initialized.
错误详情
当前Web请求执行期间发生未处理的异常,请查看堆栈跟踪获取错误详情及代码来源。
异常详细信息:System.InvalidOperationException: Fill: SelectCommand.Connection property has not been initialized.
出错代码
public void Refreshdata() { SqlCommand cmd = new SqlCommand("select * from ProgressReport", con); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); _ = sda.Fill(ds); GridView1.DataSource = SqlDataSource1; GridView1.DataBind(); }
完整堆栈跟踪
[InvalidOperationException: Fill: SelectCommand.Connection property has not been initialized.] System.Data.Common.DbDataAdapter.GetConnection3(DbDataAdapter adapter, IDbCommand command, String method) +1774041 System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +114 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +180 System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +126 WebApplication5.WebForm1.Refreshdata() +229 WebApplication5.WebForm1.Page_Load(Object sender, EventArgs e) +124 System.Web.UI.Control.OnLoad(EventArgs e) +108 System.Web.UI.Control.LoadRecursive() +90 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1533
解决方案
这个错误的核心原因是传入SqlCommand的con对象未正确初始化或未关联有效连接,导致SqlDataAdapter无法获取可用的数据库连接,可按以下步骤修复:
初始化数据库连接对象
确保con是已用有效连接字符串实例化的SqlConnection对象,示例:SqlConnection con = new SqlConnection("你的数据库连接字符串");安全管理连接生命周期
推荐使用using语句自动管理连接的打开与释放,避免资源泄漏:public void Refreshdata() { string connStr = "你的数据库连接字符串"; using (SqlConnection con = new SqlConnection(connStr)) { SqlCommand cmd = new SqlCommand("select * from ProgressReport", con); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); sda.Fill(ds); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); } }修正数据源逻辑错误
原代码中用SqlDataAdapter填充了DataSet,但最后将GridView数据源设为SqlDataSource1,这会导致之前的查询操作无效,需改为使用填充后的DataTable(如ds.Tables[0])作为数据源。
内容的提问来源于stack exchange,提问作者WombedHades
相关产品推荐
相关产品推荐

