Передача нескольких параметров запроса в метод заполнения TableAdaper C# - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать программу в Visual Studio, которая использует запрос с несколькими параметрами для заполнения представления таблицы данных, используя метод TableAdapter в C#. База данных представляет собой SQL сервер express База данных, управляемая с помощью студии управления сервером. У меня есть запрос TableAdapter, сделанный с помощью DataSet Designer, и он работает при тестировании его изнутри. Это запрос:

SELECT Customer, Department, Brand, Model, TotalTime, AMPM, InvoiceNumber, Day, TechName, EntryID, Remarks, Date FROM Entries WHERE (TechName = @TechName) AND Date BETWEEN @Date1 AND @Date2

Предполагается, что программа выбирает имя пользователя из базы данных в поле со списком и вводит две даты в поля datetimepicker, затем нажимает кнопку, запускает запрос и обновляет DataGridView с результатами. Ниже приведен код кнопки.

    private void searchButton_Click(object sender, EventArgs e)
    {

        if ((techNameComboBox.Text.Length > 0)
        && (dateDateTimePicker.Text.Length > 0)
        && (dateDateTimePicker1.Text.Length > 0))
        {
            try
            {
                this.entriesTableAdapter.FillByDateRange(
                    this.timeSheetEntriesDataSet.Entries, (techNameComboBox.Text, dateDateTimePicker.Text, dateDateTimePicker1.Text));
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

    }

Я получаю сообщение «Нет аргумента, соответствующего необходимому формальному параметру« Дата1 », ошибка ... при использовании адаптера таблицы много кода автоматически сгенерировано для вас, и я не знаю, есть ли в фоновом режиме что-то, что не генерируется для передачи нескольких параметров этому методу, или если в моем коде для нажатия кнопки что-то отсутствует, но он не передаст несколько параметров запрос, только первый. И если я создаю запрос, который использует только один параметр и использует тот же код выше (за исключением двух дополнительных параметров), он работает просто отлично.

Чего мне не хватает, чтобы заставить это работать? У меня есть только смутное понимание C#, поэтому я не могу понять, насколько я понимаю.

1 Ответ

0 голосов
/ 17 апреля 2020

Согласно вашей ошибке, вы должны использовать dateTimePicker.Value вместо

dateTimePicker.Text.

Поскольку dateTimePicker.Text просто тип строки и

dateTimePicker. Значение - это тип даты и времени.

Нам нужно, чтобы они соответствовали.

Вот мой проверенный код.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void entriesBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
        this.Validate();
        this.entriesBindingSource.EndEdit();
        this.tableAdapterManager.UpdateAll(this.testDBDataSet);

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'testDBDataSet.Entries' table. You can move, or remove it, as needed.
        this.entriesTableAdapter.Fill(this.testDBDataSet.Entries);

    }

    private void button1_Click(object sender, EventArgs e)
    {
        TestDBDataSet dBDataSet = new TestDBDataSet();
        entriesTableAdapter.FillBy(dBDataSet.Entries, textBox1.Text, dateTimePicker1.Value, dateTimePicker2.Value);
        entriesDataGridView.DataSource = dBDataSet.Entries;

    }
}

Результат:

enter image description here

...