添加第二个数据表控件后出错

时间:2016-11-15 14:22:19

标签: c# asp.net webforms

我使用从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();

2 个答案:

答案 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("......"))

保留连接对象的全局实例是一种不好的做法,因为您可能会失去对该实例生命周期的控制权。