0

我有一个链接到 C# 应用程序的 SQl Server 数据库。数据绑定到应用程序中的 datagridview。这适用于从一个表命令中进行简单选择,如下面的代码所示。但是,我希望 datagridview 根据更复杂的查询显示来自多个表的数据,但是当我尝试用复杂的查询替换下面的命令时,会出现很多错误:

SELECT DISTINCT f_name, l_name, grade, mentor_name
  FROM [Person] P, [Exam] E, [Mentor] M
 WHERE P.Person_id = E.Person_id
   AND P.Person_id = M.Person_id

如果有人有任何关于表示我的数据的其他方式的建议,我愿意接受。

public partial class Form1 : Form {

    private BindingSource bindingSource1 = new BindingSource();

    public Form1() {
        InitializeComponent();

        dataGridView1.Dock = DockStyle.Fill;
    }

    private void Form1_Load(object sender, EventArgs e) {

        dataGridView1.DataSource = bindingSource1;
        GetData("SELECT * from Person");
    }

    private void GetData(string command) {

        String connectionString = "Data Source=MY-PC\\USER;Initial Catalog=MyDatabase;Integrated Security=True";
        SqlDataAdapter dataAdapter = new SqlDataAdapter(command, connectionString);

        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

        DataTable table = new DataTable();
        table.Locale = System.Globalization.CultureInfo.InvariantCulture;
        dataAdapter.Fill(table);
        bindingSource1.DataSource = table;

        dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
    }
}

谢谢。

4

2 回答 2

1

如果您能够在网格中绑定数据,那么您的 SQL 查询有问题,请在 SQL Server Management Studio 中查看您的查询。表中的两列名称似乎相同。

使用临时表名更新您选择的列名,即:

SELECT distinct 
P.f_name, P.l_name, E.grade, mentor_name
FROM [Person] P, [Exam] E, [Mentor] M
WHERE P.Person_id = E.Person_id
AND P.Person_id = M.Person_id
于 2013-07-16T10:39:50.237 回答
0

首先要改进您的查询,我们将使用它inner joins来获取数据

SELECT distinct P.f_name, P.l_name, E.grade, M.mentor_name
FROM [Person] P
INNER JOIN [Exam] E ON P.Person_id = E.Person_id
INNER JOIN [Mentor] M ON P.Person_id = M.Person_id

您的异常表明您以错误的方式将查询字符串传递给方法,并且编译器试图将其解释为代码,请尝试以下操作:

GetData("SELECT distinct P.f_name, P.l_name, E.grade, M.mentor_name FROM [Person] P INNER JOIN [Exam] E ON P.Person_id = E.Person_id INNER JOIN [Mentor] M ON P.Person_id = M.Person_id");
于 2013-07-16T09:09:32.690 回答