【问题标题】:Trying to display information from a database table into a list box试图将数据库表中的信息显示到列表框中
【发布时间】:2017-04-25 08:15:27
【问题描述】:

我目前正在尝试使用 Visual Studio 在 c# 中创建一个 asp.net Web 应用程序,并且可以使用一些帮助。

我的一个网页是一个注册页面,您选择一个单选按钮(父或子)并继续填写表格。我让它工作,以便根据您选择的单选按钮,信息存储在我的数据库中的父表或子表中。

我遇到的问题是下一步需要我显示孩子的详细信息(姓名、用户名和出生日期)。我希望在表格中显示数据,但对我尝试遵循的示例和我自己尝试过的其他事情没有运气。我的下一个想法是使用一个列表框,并使用我的代码中显示的注释掉的部分,我设法在表格中显示给孩子们,但都在一行上。

正如我的代码现在显示的那样,“ListBox1.Items.Add(reader...”中的“Add”下出现错误。它说“Add”方法没有重载需要 3 个参数。我试过了我在这里和网络上的其他地方找到了各种修复程序,但没有任何效果。

谁能告诉我如何正确显示这些值(每行 1 个孩子),甚至如何正确使用表格来显示孩子?

提前致谢!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Diagnostics;
using System.Collections;


namespace Coursework
{
public partial class View_remove_children : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection connect = new SqlConnection("Data Source=THEBEAST;Initial Catalog=newregDB;Integrated Security=True;Pooling=False");

        connect.Open();

        SqlCommand cmd = new SqlCommand("SELECT [firstname], [dob], [ChildID] FROM [children]");
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.Connection = connect;

        //string temp = "";

        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            {
                //temp += reader["firstname"].ToString();
                //temp += reader["dob"].ToString();
                //temp += reader["gender"].ToString();
                //temp += "<br/>";
                ListBox1.Items.Add(reader["firstname"], reader["dob"], reader["ChildID"]);

            }

            connect.Close();
        }
    }
}

}

【问题讨论】:

  • 您应该考虑将SqlConnection 包装在using 块中。目前,如果抛出异常,可能不会调用Close()
  • 请在编码时学习正确的语法你不需要双重{这个while (reader.Read()){的insdie也了解Page_Load以及PostBacks中发生的事情或!IsPostBack也使用.ToString()时使用阅读器对象的另一个建议是使用调试器..如果正在添加项目,您能否在调试器中看到..?我建议在网页内部使用 DataGrid 来显示查询返回的结果。很多很棒的工作示例说明如何在网络上执行此操作。
  • 如果选择语句,因为列名不是保留字,所以不需要将列名包裹在[ ]
  • 我忘了提到我对 c# 和 asp.net 非常陌生,所以很多信息对我来说意义不大。您是说整个代码块甚至不应该在页面加载中吗?我的理解是页面加载中的任何内容都将在页面加载时执行。我希望我的数据库表中的子条目在此页面加载时可见,所以认为这有意义吗?我还在每个条目(名字、dob 和 childID)之后添加了 .ToString(),但我仍然收到 3 个参数错误的重载。
  • @ACostea 我们了解您可能是 .net 和 C# 的新手,但是您对使用互联网并不陌生,所以请记住,网上有大量关于学习的免费教程C# Basics

标签: c# sql asp.net database visual-studio


【解决方案1】:

如果您需要表格视图,您最好使用 GridView,将 GridView 控件拖放到您的设计器视图并执行以下操作

using(SqlConnection connect = new SqlConnection("Data Source=THEBEAST;Initial Catalog=newregDB;Integrated Security=True;Pooling=False"))
using(SqlCommand cmd = new SqlCommand("SELECT [firstname], [dob], [ChildID] FROM [children]", connect))
{
    connect.Open();
    SqlDataAdapter sda = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    sda.Fill(dt);
    GridView1.DataSource = dt; //give your gridview name here
    GridView1.DataBind();//give your gridview name here
}

尝试一些关于 gridview 分组、编辑、插入等的教程。然后您可以自己决定这是否适合您的要求。

Implement GridView Grouping: Group similar GridView Rows in ASP.Net

Simple Insert Select Edit Update and Delete in ASP.Net GridView control

【讨论】:

  • 您可以将其重构为使用更少的代码,例如 new SqlDataAdapter(cmd).Fill(dt); 但您必须将 cmd 包裹在 using(){ } 周围才能利用这一点有应该做的伎俩。就我个人而言,我会使用 2 个 using 语句,一个用于 constring,另一个用于命令
  • 谢谢你的例子,在我尝试实现这个之前,我应该补充一件事。最终,我需要能够根据他们的年龄组(6-10、11-13、14-16)查看孩子,甚至删除一个孩子。网格视图能给我这种灵活性吗?再次感谢。
  • 您需要设置过滤或更改您的查询,以便您可以在 Select 语句中传递参数
  • 所以我将在查看您发布的教程后使用 GridView,它似乎可以满足我的需要。使用您提供的代码后,我现在在 SqlDataAdapter 处遇到错误,它说“类型或命名空间名称 'SqlDataAdapter' 在命名空间'System.Data' 中不存在。它以前工作过,现在没有工作有什么原因吗?谢谢!编辑 - 我也在此页面上使用 System.Data.SqlClient 和 System.Data。
  • @ACostea 有一个拼写错误,请检查您在两个地方都有SqlDataAdapter
【解决方案2】:

我会将连接字符串存储在 .Config 文件中,然后我将执行以下操作并将此代码放在静态方法中,例如

public static DataTable SelectData()
{
    var ConnString = ConfigurationManager.ConnectionStrings["YourConnectionString"].ConnectionString;
    SqlDataAdapter sda;
    DataTable dt;
    using (SqlConnection connStr = new SqlConnection(ConnString))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT firstname, dob, ChildID FROM children", connStr))
        {
            cmd.CommandType = CommandType.Text;
            sda = new SqlDataAdapter(cmd);
            dt = new DataTable();
            new SqlDataAdapter(cmd).Fill(dt);
        }
    }
    return dt;
}

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2012-04-29
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多