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 窗体中传递custName了的值。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

绑定你DataGirdViewDataTable返回。

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;

注意那个custNameDataTypeText你的Where clause东西不对所以它应该像

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

PS:别忘了听从史蒂夫先生的建议

于 2013-02-13T15:58:40.553 回答