我使用从DataTable填充的datalist控件来显示应用程序中的图像。现在我需要修改它以显示来自不同DataTable的两个图像列表。因此添加了第二个DataList并为第二个DataTable编码。
我收到错误:
尚未初始化连接字符串属性。
DataTable控件的代码,第二个(edt
)生成错误:
DataTable dt = new DataTable();
using (Conn)
{
SqlDataAdapter ad = new SqlDataAdapter("SELECT QuestionID, Images2.ImageID, ImageFile, ImageContent, ImageName, SEQ_NUM from qimages join Images2 on qimages.imageid = images2.imageid where QuestionID = @QuestionID", Conn);
ad.SelectCommand.Parameters.Add("QuestionID", SqlDbType.BigInt).Value = Convert.ToInt32(Request["Id"]);
ad.Fill(dt);
}
dlImages.DataSource = dt;
dlImages.DataBind();
DataTable edt = new DataTable();
using (Conn)
{
SqlDataAdapter ed = new SqlDataAdapter("SELECT QuestionID, Images2.ImageID, ImageFile, ImageContent, ImageName, SEQ_NUM from eimages join EditedImages on eimages.imageid = editedimages.imageid where QuestionID = @QuestionID", Conn);
ed.SelectCommand.Parameters.Add("QuestionID", SqlDbType.BigInt).Value = Convert.ToInt32(Request["Id"]);
ed.Fill(edt);
}
EditImages.DataSource = edt;
EditImages.DataBind();
尝试按照建议更改第二个控件以使用自己的连接字符串。下面是第二个数据表的新代码,它仍然抛出相同的未初始化错误:
string Constr = ConfigurationManager.ConnectionStrings["CS1"].ConnectionString;
SqlConnection Conn2 = new SqlConnection(Constr);
DataTable edt = new DataTable();
using (Conn2)
{
SqlDataAdapter ed = new SqlDataAdapter("SELECT QuestionID, EditImages.ImageID, ImageFile, ImageContent, ImageName, SEQ_NUM from eimages join EditImages on eimages.imageid = editimages.imageid where QuestionID = @QuestionID", Conn);
ed.SelectCommand.Parameters.Add("QuestionID", SqlDbType.BigInt).Value = Convert.ToInt32(Request["Id"]);
ed.Fill(edt);
}
EditImages.DataSource = edt;
EditImages.DataBind();
答案 0 :(得分:1)
当你完成连接时,你正在处理连接(这就是使用块的用途)。使用块在一个内部进行所有数据库交互,或者使用相同的连接字符串创建第二个连接。这是在同一个使用块中执行此操作的示例。
DataTable dt = new DataTable();
DataTable edt = new DataTable();
using (Conn)
{
SqlDataAdapter ad = new SqlDataAdapter("SELECT QuestionID, Images2.ImageID, ImageFile, ImageContent, ImageName, SEQ_NUM from qimages join Images2 on qimages.imageid = images2.imageid where QuestionID = @QuestionID", Conn);
ad.SelectCommand.Parameters.Add("QuestionID", SqlDbType.BigInt).Value = Convert.ToInt32(Request["Id"]);
ad.Fill(dt);
SqlDataAdapter ed = new SqlDataAdapter("SELECT QuestionID, Images2.ImageID, ImageFile, ImageContent, ImageName, SEQ_NUM from eimages join EditedImages on eimages.imageid = editedimages.imageid where QuestionID = @QuestionID", Conn);
ed.SelectCommand.Parameters.Add("QuestionID", SqlDbType.BigInt).Value = Convert.ToInt32(Request["Id"]);
ed.Fill(edt);
}
dlImages.DataSource = dt;
dlImages.DataBind();
EditImages.DataSource = edt;
EditImages.DataBind();
你在这里有很多重复的代码,你可能会想到将它重构为一个方法。您还将数据库访问逻辑混合到您的Web窗体代码后面,这非常混乱。应将所有数据库逻辑抽象为单独的数据访问层。
答案 1 :(得分:0)
当数据源尝试绑定到数据时会出现此错误,但由于无法找到连接字符串而无法获得此错误。
SqlConnection Conn = new SqlConnection(ConfigurationManager.ConnectionStrings[nameOfConnectionString].ConnectionString;
此外,当您想要在数据库中进行更改或检索数据时,请使用此using(SqlConnection Conn = new SqlConnection("......"))
。
保留连接对象的全局实例是一种不好的做法,因为您可能会失去对该实例生命周期的控制权。