我正在尝试以窗体形式显示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;
}
有人可以指出我错在哪里吗?
答案 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
DataType
为Text
且Where clause
某些内容不对,所以它应该像
string sql = "SELECT * FROM [Customer] WHERE Ebayname = '" + custName + "'";
P.S。:不要忘记遵循史蒂夫先生的建议