显示查询结果

时间:2013-02-13 15:47:45

标签: c# winforms datagridview

我正在尝试以窗体形式显示datagridview中的数据。

我有以下代码从数据库中获取数据。

    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窗体中的custName传递textBox的值。这将显示包含该名称的所有行。

在这里,我是如何尝试显示数据的。

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

有人可以指出我错在哪里吗?

3 个答案:

答案 0 :(得分:2)

首先,您需要检查数据集是否包含任何结果。然后不要以这种方式使用字符串连接来构建命令,但总是参数化查询。这将允许避免Sql Injections并解析字符串,日期和数字小数的问题。

您是否尝试过当您的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");
    }
}
....

答案 1 :(得分: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"];
}

答案 2 :(得分: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 + "'";

P.S。:不要忘记遵循史蒂夫先生的建议