0

datagridviewWindowsフォームでデータを表示しようとしています。

データベースからデータを取得する次のコードがあります。

    public DataSet GetUser(string custName)
    {
        string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\Amrit\\Desktop\\Database.accdb ;Persist Security Info=False;";
        DataSet dataSet = new DataSet();
        OleDbConnection oleConn = new OleDbConnection(connString);

        try
        {
            oleConn.Open();
            string sql = "SELECT * FROM [Customer] WHERE [Customer's Ebayname]=" + custName;
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn);
            dataAdapter.Fill(dataSet, "Customer");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        finally
        {
            oleConn.Close();
        }
        if (dataSet.Tables.Count <= 0)
            return null;
        else
            return dataSet;
    }

上記では、windows フォームでcustNamefromの値を渡しています。textBoxこれにより、その名前を含むすべての行が表示されます。

ここでは、どのようにデータを表示しようとしていますか。

    private void button1_Click(object sender, EventArgs e)
    {
        DataSet ds = GetUser(textBox1.Text);
        dataGridView1.DataSource = ds;
    }

誰かが私が間違っている場所を指摘できますか?

4

3 に答える 3

2

まず、データセットにコマンドの結果が含まれているかどうかを確認する必要があります。次に、コマンドを作成するためにそのように文字列連結を使用しないでください。ただし、常にパラメーター化されたクエリを使用してください。これにより、文字列、日付、数値の小数に関するSQL インジェクションと解析の問題を回避できます。

custName 変数に一重引用符が含まれているとどうなるか試しましたか?

....
using(OleDbConnection oleConn = new OleDbConnection(connString))
{
    try
    {
        oleConn.Open();
        string sql = "SELECT * FROM [Customer] WHERE [Customer's Ebayname]=@cust";
        OleDbCommand cmd = new OleDbCommand(sql, oleConn);
        cmd.Parameters.AddWithValue("@cust", custName);
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmd);
        dataAdapter.Fill(dataSet, "Customer");
    }
}
....
于 2013-02-13T15:55:03.113 に答える
1

返さDataGirdViewれたにバインドします。DataTable

private void button1_Click(object sender, EventArgs e)
{
    DataSet ds = GetUser(textBox1.Text);
    if (ds == null)
    {
         return;
    }
    dataGridView1.DataSource = ds.Tables["Customer"];
}
于 2013-02-13T15:52:16.023 に答える
0

関数を として返すのはどうDataTableですか?

public DataTable GetUser(string custName)
{
   //..codes
   return dataSet.Tables["Customer"];
}

これはあなたの問題だと思います

string sql = "SELECT * FROM [Customer] WHERE [Customer's Ebayname]=" + custName;

があり、あなたのcustName何かが正しくないことに注意してください。DataTypeTextWhere clause

string sql = "SELECT * FROM [Customer] WHERE Ebayname = '" + custName + "'";

PS : スティーブ氏のアドバイスに従うことを忘れないでください

于 2013-02-13T15:58:40.553 に答える