Как сделать SQL из текстового поля и отобразить в сетке данных? - PullRequest
0 голосов
/ 15 августа 2011

Вот фрагмент кода

string search = textBox1.Text;
int s = Convert.ToInt32(search);
string conn="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\Data.accdb";
string query="SELECT playerBatStyle FROM Player where playerID='" + s + ";
OleDbDataAdapter dAdapter=new OleDbDataAdapter (query ,conn );
OleDbCommandBuilder cBuilder=new OleDbCommandBuilder (dAdapter );
DataTable dTable=new DataTable ();
dAdapter .Fill (dTable );
dataGridView1.DataSource = dTable;

Ответы [ 6 ]

1 голос
/ 15 августа 2011

Как уже упоминалось, s имеет тип int, поэтому в запросе кавычки не нужны, и вам нужна строка привязки данных.

Кроме того, если вы еще этого не сделали, вам нужноубедитесь, что значение действительно существует в текстовом поле, прежде чем пытаться преобразовать его в целое число.Вам не нужен OleDbCommandBuilder, так как DataAdapter обрабатывает команду внутри себя как свойство SelectCommand.Обязательно рассмотрите возможность использования параметризованного запроса, который уменьшит уязвимости в SQL-инъекциях.

Ниже приведены мои предложения:

if (textBox1.Text != "")
{
    string search = textBox1.Text;
    int s = Convert.ToInt32(search);
    string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Local Docs\\Temp\\Data.accdb";
    string query = "SELECT playerBatStyle FROM Player where playerID=@playerID";
    OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, conn);
    dAdapter.SelectCommand.Parameters.AddWithValue("@playerID", s);
    DataTable dTable = new DataTable();
    dAdapter.Fill(dTable);
    dataGridView1.DataSource = dTable;
    dataGridView1.DataBind(); 
}
1 голос
/ 15 августа 2011

В вашем предложении where была незакрытая одинарная кавычка. Попробуйте вместо этого:

string query = String.Format("SELECT playerBatStyle FROM Player where playerID={0}", s);
0 голосов
/ 06 ноября 2013

Используйте этот запрос для получения данных, связанных с поиском пользователя

"Select playerBatStyle from Player where Player like %'"+s+"'";

0 голосов
/ 15 августа 2011

посмотрите, может ли этот пример помочь вам,

Привет.

0 голосов
/ 15 августа 2011

PlayerID выглядит int напечатайте мне, что означает, что вам не нужно ставить одинарные кавычки вокруг него

string query = "SELECT playerBatStyle FROM Player where playerID=" + s + ";

В конце вы должны будете сделать dataGridView1.DataBind();, если хотитепоказывать результаты в DataGridView

В примечании всегда рекомендуется пользователю параметризованный запрос вместо конкатенированных значений в запросе, это небезопасно

0 голосов
/ 15 августа 2011

Код, который вы разместили, выглядит хорошо.Несколько исправлений:

    ...
    //fix lots of missing quotation marks 
    string query="SELECT playerBatStyle FROM Player where playerID='" + s + "' "; 
    ...
    dataGridView1.DataBind(); //yes, we should call DataBind
...