有人能帮助我解决我遇到的问题吗?出于某种原因,当我运行我的页面时,我得到了下拉列表来填充数据,但是每个SQL查询中我的数据库中的第一个项目都没有填充。
例如,我的数据库表是:
分类
1 Books
2 Clothing
3 Toys
4 Household Items
我的第一个查询 -
SELECT Category FROM ProductCategories
我的下拉列表中填充了
Clothing
Toys
Household Items
我还有其他两个下拉列表,我正在做同样的事情。一旦我理解了这一点,我将试图弄清楚我在数据库中插入数据时遇到的另一个问题。
谢谢!
public partial class InsertItems : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection connection;
SqlCommand populateList;
SqlDataReader reader;
string connectionString = ConfigurationManager.ConnectionStrings["LakerBids"].ConnectionString;
connection = new SqlConnection(connectionString);
populateList = new SqlCommand("USE LakerBids SELECT Category FROM ProductCategories;" +
"USE LakerBids SELECT SubCategory FROM ProductSubCategories;" +
"USE LakerBids SELECT LName FROM Users", connection);
if (!IsPostBack)
{
try
{
connection.Open();
reader = populateList.ExecuteReader();
while (reader.Read())
{
pcategory.DataSource = reader;
pcategory.DataValueField = "Category";
pcategory.DataBind();
}
reader.NextResult();
while (reader.Read())
{
psubcategory.DataSource = reader;
psubcategory.DataValueField = "SubCategory";
psubcategory.DataBind();
}
reader.NextResult();
while (reader.Read())
{
user.DataSource = reader;
user.DataValueField = "LName";
user.DataBind();
}
reader.Close();
}
finally
{
connection.Close();
}
}
}
protected void AddItem(object sender, EventArgs e)
{
if (Page.IsValid)
{
SqlConnection connection;
SqlCommand insertData;
string connectionString = ConfigurationManager.ConnectionStrings["LakerBids"].ConnectionString;
connection = new SqlConnection(connectionString);
insertData = new SqlCommand("INSERT INTO Products (ProductName, ProductDesc, CategoryID, SubCatID, StatusID, UserID, ReservePrice, AuctionLength, BidID)" +
"VALUES (@ProductName, @ProductDesc, @CategoryID, @SubCatID, 1, @UserID, @ReservePrice, @AuctionLength, NULL)", connection);
insertData.Parameters.Add("@ProductName", System.Data.SqlDbType.NVarChar, 50);
insertData.Parameters["@ProductName"].Value = pname.Text;
insertData.Parameters.Add("@ProductDesc", System.Data.SqlDbType.NVarChar, 200);
insertData.Parameters["@ProductDesc"].Value = pdesc.Text;
insertData.Parameters.Add("@CategoryID", System.Data.SqlDbType.Int);
insertData.Parameters["@CategoryID"].Value = pcategory.SelectedIndex;
insertData.Parameters.Add("@SubCatID", System.Data.SqlDbType.Int);
insertData.Parameters["@SubCatID"].Value = psubcategory.SelectedIndex;
insertData.Parameters.Add("@UserID", System.Data.SqlDbType.Int);
insertData.Parameters["@UserID"].Value = user.SelectedIndex + 2;
insertData.Parameters.Add("@ReservePrice", System.Data.SqlDbType.Money);
insertData.Parameters["@ReservePrice"].Value = Convert.ToDecimal(reserveprice.Text);
insertData.Parameters.Add("@AuctionLength", System.Data.SqlDbType.Int);
insertData.Parameters["@AuctionLength"].Value = Convert.ToInt32(auctionlength.Text);
try
{
connection.Open();
insertData.ExecuteNonQuery();
Response.Redirect("Categories.aspx");
}
catch (Exception error)
{
dberror.Text = error.ToString();
}
finally
{
connection.Close();
}
}
}
}
答案 0 :(得分:1)
您需要使用DataSet或填充集合中的业务实体,然后绑定到集合。
List<Category> cats = new List<Category>();
while (reader.Read())
{
Category cat = new Category();
// fill properties from DataReader
cats.Add(cat);
}
pcategory.DataSource = cats;
pcategory.DataValueField = "Category";
pcategory.DataBind();
答案 1 :(得分:0)
Sab0tr0n,我怀疑其中有两件事正在发生。
1)如果您说在执行某种“添加类别”操作后没有出现第一项,则可能是在插入完成之前填充了下拉列表。意思是,在允许将插入提交到数据库之后,需要重新查询。
OR
2)在这一行上设一个断点:
string connectionString = ConfigurationManager.ConnectionStrings["LakerBids"].ConnectionString;
然后确认connectionString是否正确的数据库。我看到旧的配置文件指向测试或暂存数据库会导致这种混淆。
祝你好运。如果这些不是答案,可以简化您的示例,或详细说明您对应用程序的处理方式以及何时发现问题。答案 2 :(得分:0)
每个块中的“reader.read()”语句实际上是读取第一行数据,因此当您设置DataSource时,第一行已被读取。试着把它拿出来
如果你想迭代每个结果,你应该使用“while(reader.Read())”,而不是一步绑定结果集。
话虽如此,关于使用数据集,分离逻辑等的评论是有效的