2013-02-13 4 views
0

Я пытаюсь отобразить данные в 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; 
    } 

Выше я передаю значение custName из textBox в виде окон. Это отобразит все строки, содержащие это имя.

Здесь, как я пытаюсь отобразить данные.

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

Может кто-нибудь указать, где я ошибаюсь?

ответ

-1

Как насчет возврата Функция как DataTable?

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

, и я подозреваю, что это ваша проблема

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

уведомление о том, что custNameDataType является Text и ваш Where clause что-то не правильно, так его должно быть как

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

P.S.: Не забудьте следовать совету г-на Стива

+0

. Тогда почему я получил этот значащий downvote? ': D' – spajce

+0

custName =" john o'shea "??? – Steve

+0

Что значит мистер. Стив? – spajce

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"]; 
} 
+0

Я уже пробовал это и выбрал для меня нулевое исключение ссылки –

+0

, когда я поставил точку останова в dataGridView1.DataSource = ds.Tables ["Customer"]; , он не попадает, хотя значение i входит в базу данных –

2

Прежде всего, вам нужно проверить, содержит ли ваш набор данных какой-либо результат для команды. Тогда не используйте конкатенацию строк таким образом, чтобы строить команду, но всегда параметризованные запросы. Это позволит избежать Sql Injections и анализировать проблемы по строкам, датам и числовым десятичным знакам.

Вы пробовали, что происходит, когда переменная custName содержит одну цитату?

.... 
using(OleDbConnection oleConn = new OleDbConnection(connString)) 
{ 
    try 
    { 
     oleConn.Open(); 
     string sql = "SELECT * FROM [Customer] WHERE [Customer's Ebayname][email protected]"; 
     OleDbCommand cmd = new OleDbCommand(sql, oleConn); 
     cmd.Parameters.AddWithValue("@cust", custName); 
     OleDbDataAdapter dataAdapter = new OleDbDataAdapter(cmd); 
     dataAdapter.Fill(dataSet, "Customer"); 
    } 
} 
.... 
Смежные вопросы