Переменная C # в запросе MySql не распознается - PullRequest
0 голосов
/ 11 декабря 2018

В моем коде C # есть переменная int, и я пытаюсь использовать ее в запросе MySql.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace projeV1
{

    public partial class ProjeDetay : Form
    {

        public ProjeDetay()
        {
            InitializeComponent();
        }

        private void ProjeDetay_Load(object sender, EventArgs e)
        {

            int satir_projem = Projeler.satir_proje;
            string connectionString = "Server = localhost; Port = ...; Database = ...; Uid = root; Pwd = ...; Allow User Variables=True";
            MySqlConnection databaseConnection = new MySqlConnection(connectionString);
            MySqlCommand command;

            databaseConnection.Open();
            command = databaseConnection.CreateCommand();

            string myQuery = "select projeAdi from projeler where projeID = @satir_projem";
            MySqlDataAdapter dataAdapter = new MySqlDataAdapter(myQuery, databaseConnection);
            command.Parameters.Add("@satir_projem", MySqlDbType.Int32).Value = satir_projem;

            DataSet DS = new DataSet();
            dataAdapter.Fill(DS);
            dataGridView_ProjeDetay.DataSource = DS.Tables[0];

            MessageBox.Show(Projeler.satir_proje.ToString());

            MessageBox.Show(satir_projem.ToString());
        }
    }
}

(Извините, если с кодированием это выглядит как беспорядок, но я новичок в этом ^^)

Окна MessageBox правильно отображают значения переменных, поэтому проблем нетс переменной.И когда я заменяю @satir_projem из строки запроса на число, такое как «2» (см. Пример ниже), например, результат верен, но когда я использую @satir_projem в запросе, он не работает.Я не вижу, что я делаю неправильно.

Пример строки запроса:

"select projeAdi from projeler where projeID = 2"

PS 1: Первоначально я пытаюсь получить индекс выбранной строки (которыйпеременная с именем Projeler.satir_proje) в DataGridView, используемая в форме с именем «Projeler» и в другой форме (которая называется ProjeDetay), присваивая это значение индекса другой переменной с именем «satir_projem» и используя это значение для получения связанных данных измою базу данных и поместил эти данные в другой DataGridView, расположенный во второй форме (которая называется dataGridView_ProjeDetay).

PS 2: я провел много исследований по этой проблеме и попробовал многие решения, с которыми столкнулсяпуть;однако, ни один из них не работал для меня.Итак, я здесь:)

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

MySqlConnection databaseConnection = new MySqlConnection(connectionString);
MySqlCommand command;

string myQuery = "select projeAdi from projeler where projeID = @satir_projem";

databaseConnection.Open();

command = new MySqlCommand(myQuery, databaseConnection);

MySqlDataAdapter dataAdapter = new MySqlDataAdapter(command);

0 голосов
/ 11 декабря 2018

Просто хочу уточнить, почему код @ Onur_Saatcioglu выдает ошибку.

вы добавляете @satir_projem в команду, но добавленный таким образом параметр в команду не передается в dataadapter, который служит мостом между DataSetи SQL Server для извлечения и сохранения данных.

Следовательно, вы можете

1) Как сказал Лестер, создать команду, подобную

command = new MySqlCommand(myQuery, databaseConnection);

, и передать ее в DataAdapter * 1010.*

MySqlDataAdapter dataAdapter = new MySqlDataAdapter(command);

2) Как сказал @Pablo_notPicasso, если вы используете

dataAdapter.SelectCommand.Parameters.AddWithValue("@satir_projem", satir_projem);

, тогда «команда» не имеет смысла, вы можете просто удалить ее.

0 голосов
/ 11 декабря 2018

Вы устанавливаете параметр для команды, которая не используется.Вместо этого вы должны использовать DataAdapter.SelectCommand

dataAdapter.SelectCommand.Parameters.Add(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...