0

C# アプリケーションにリンクした SQL Server データベースがあります。データは、アプリケーションの datagridview にバインドされます。以下のコードに示すように、これは 1 つのテーブル コマンドからの単純な選択では問題なく機能します。ただし、より複雑なクエリに基づいて複数のテーブルのデータを 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 でクエリを確認してください。テーブルで同じ2つの列名のようです。

選択した列名を一時テーブル名で更新します。つまり:

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

あなたの例外は、クエリ文字列をメソッドに間違った方法で渡していることを示しており、コンパイラはそれを code として解釈しようとしています。これを試してください:

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 に答える