我的代码面临着独特的问题。
这是显示comboBox1
中表格工作正常的代码。
ComboBox充满学校名称,当用户选择该ComboBox中的学校时,该学校的学生将显示在DataGridView中 请帮忙。
此应用程序的功能:
- 在sql database(schoolName)中创建表。
- 选择表格(选择学校)。
- 在学校添加值(学生信息)。
醇>错误:
- 底部的数据网格没有正确检索,它显示了其他内容。
醇>
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Login.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM INFORMATION_SCHEMA.TABLES";
SqlDataAdapter dbAdapter = new SqlDataAdapter(cmd);
DataTable dtRecords = new DataTable();
dbAdapter.Fill(dtRecords);
dataGridView1.DataSource = dtRecords; //dataGrid
comboBox1.DataSource = dtRecords;
comboBox1.DisplayMember = "TABLE_NAME";
con.Close();
答案 0 :(得分:1)
首先检查一下:http://msdn.microsoft.com/en-us/library/ms186224.aspx
SQL查询SELECT * FROM INFORMATION_SCHEMA.TABLES
返回有关数据库中存在的表的信息而不是specefic表中的行
如果您想了解该表的信息,可以通过在ComboBox的SelectedIndexChanged
事件中编写新查询来丰富该表:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\Login.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM " + comboBox1.Text;
SqlDataAdapter dbAdapter = new SqlDataAdapter(cmd);
DataTable dtRecords = new DataTable();
dbAdapter.Fill(dtRecords);
dataGridView1.DataSource = dtRecords; //dataGrid
con.Close();
}
此代码可以解决此问题,但实际上存在一个更大的问题,并且它与您的数据结构有关。
这种代码告诉我每个学校都有一张表,而且不是规范化的数据库。 让我们通过一个例子来清楚:想象一下,你的经理想把一些学生从他们的学校搬到另一所学校,在这个数据结构中你必须将一个记录从一个表移动到另一个表,首先你必须找到指向那个记录的记录。我们的学生然后将其保存在内存中,然后在目标表中创建一个新记录。 在这个例子中:
另一方面,您可以简单地创建表并将其命名为schools
,其中包含两个主要列:ID
,Name
然后创建一个表,并将其命名为students
,其中包含三个主要列:ID
,SchoolID
,Name
每个学校都有一个唯一的ID,每个学生都有SchoolID
栏中与自己学校相关的自己的ID。