Динамически передавать значение внутри запроса? - PullRequest
0 голосов
/ 14 июня 2011

В моей таблице два столбца syntax и query Table1. Синтаксис содержит данные с именем po и запрос с именем select * from po_pomas_pur_order_hdr where pomas_pono =. Я получил это значение запроса с помощью

SqlDataAdapter da = new SqlDataAdapter("select query from Table1 where syntax = '" + textBox1.Text + "'", conn);

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

 SqlDataAdapter da1 = new SqlDataAdapter(da.tostring()  +"'"+ textBox1.Text +"'", conn)

Результирующий запрос должен выглядеть следующим образом:

 select * from po_pomas_pur_order_hdr where pomas_pono = '2PO/000002/09-10'

Но это невозможно. Как получить такой запрос? Любое предложение?

Ответы [ 4 ]

0 голосов
/ 14 июня 2011

При условии, что у вас есть набор данных, который вы намереваетесь заполнить с помощью адаптера, и что вы настроили запросы для использования параметров , чтобы избежать sql внедрения , вы должны иметь возможность использовать что-то как это:

string query;
using(var sqlCommand = new SqlCommand(
    "select query from Table1 where syntax=@syntax", conn))
{
    sqlCommand.Parameters.AddWithValue("syntax", textBox1.Text);
    query = (string)sqlCommand.ExecuteScalar();
}

using(var dataAdapter = new SqlDataAdapter())
using(var dataCommand = new SqlCommand(query, conn))
{
    dataCommand.Parameters.AddWithValue("parameter", poNumber);
    dataAdapter.SelectCommand = dataCommand;
    dataAdapter.Fill(myDataSet);
}
0 голосов
/ 14 июня 2011

Я предлагаю вам использовать SqlParameters . Здесь - пример использования DataAdapter и параметров.

0 голосов
/ 14 июня 2011

SqlDataAdapter используется для заполнения наборов данных и таблиц данных.Вы не можете получить результат запроса с ToString().Я думаю, что вы хотите использовать SqlCommand для выполнения первого запроса, чтобы получить фактический запрос для запуска из базы данных, например:

string query = null;
using (var command = new SqlCommand("select query from Table1 where syntax = @Syntax", conn))
{
    command.Parameters.AddWithValue("@Syntax", textBox1.Text);
    query = command.ExecuteScalar(); // this assumes only one query result is returned
}

Затем вы можете использовать адаптер данных для его заполнения:

SqlDataAdapter da1 = new SqlDataAdapter(query  +"'"+ textBox1.Text +"'", conn);

Хотя я бы предложил использовать параметры и для этого.

0 голосов
/ 14 июня 2011

таким способом безопаснее: dotnetperls

Он проверяет "" "и" \ ", проверяет тип полей и т.д ...

Код из приведенного выше примера (то же самое для удаления и обновления вставки):

using (SqlCommand command = new SqlCommand("SELECT * FROM Dogs1 WHERE Name LIKE @Name", connection))
    {
    //
    // Add new SqlParameter to the command.
    //
    command.Parameters.Add(new SqlParameter("Name", dogName));
    //
    // Read in the SELECT results.
    //
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        int weight = reader.GetInt32(0);
        string name = reader.GetString(1);
        string breed = reader.GetString(2);
        Console.WriteLine("Weight = {0}, Name = {1}, Breed = {2}", weight, name, breed);
    }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...