Не задано значение для одного или нескольких обязательных параметров - C # / Access - PullRequest
0 голосов
/ 22 ноября 2018

Я впервые пытаюсь прочитать базу данных Access и записать каждую строку в консоль.Когда я выполняю приложение, я получаю исключение, которое говорит: «Для одного или нескольких обязательных параметров не задано значение» следующего оператора:

OleDbDataReader reader = cmd.ExecuteReader ();

Я относительно новичок в программировании на c # и после нескольких часов исследований не могу понять, что я делаю неправильно.Вот мой код:

private void maintenanceToolStripMenuItem_Click(object sender, EventArgs e)
    {
        //Use a variable to hold the SQL statement.
        string inputString = "SELECT Full_Name, First_Name, Last_Name, Company FROM CONTACTS";

        try
        {
            //Create an OleDbCommand object and pass in the SQL statement and OleDbConnection object
            OleDbCommand cmd = new OleDbCommand(inputString, conn);

            //Send the CommandText to the connection, and then build an OleDbDataReader.
            OleDbDataReader reader = cmd.ExecuteReader();

            while (reader.HasRows)
            {
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}", reader.GetString(1));
                    reader.NextResult();
                }
            }
            reader.Close();
        }
        catch (Exception ex)
        {
            error_message = ex.Message;
            MessageBox.Show(error_message);
        }

В ответ на комментарии я публикую большой фрагмент кода, чтобы исключить любые предположения и дать более полную картину того, что я пытаюсь сделать:

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 System.Data.OleDb;
using System.IO;

namespace AzFloodSquad
{
    public partial class frm1DefaultScreen : Form
    {
        //Initialize the application
        String conn_string = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\\Databases\\AzFloodSquad\\AzFloodSquad.accdb;Persist Security Info=False;";
        OleDbConnection conn = null;
        String error_message = "";
        String q = "";
        string varReportId = "";

    public frm1DefaultScreen()
    {
        InitializeComponent();
    }

    //Load the default form
    private void frm1DefaultScreen_Load(object sender, EventArgs e)
    {
        connectToolStripMenuItem.PerformClick();
        contactsToolStripMenuItem.PerformClick();
    }

    //Exit the application
    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    //Start the database
    private void connectToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            conn = new OleDbConnection(conn_string);
            conn.Open();
            disconnectToolStripMenuItem.Enabled = true;
            connectToolStripMenuItem.Enabled = false;
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); }
    }

    //Stop the database
    private void disconnectToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            conn.Close();
            disconnectToolStripMenuItem.Enabled = false;
            connectToolStripMenuItem.Enabled = true;
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); }
    }

    //Clean up database whem form close button clicked
    private void frm1DefaultScreen_FormClosing(object sender, FormClosingEventArgs e)
    {
        disconnectToolStripMenuItem.PerformClick();
    }

    private void contactsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        varReportId = "Contacts";
        q = "SELECT * " +
                "FROM CONTACTS WHERE CONTACTS.CONTACT_TYPE = 'CUSTOMER' " +
                    "OR CONTACTS.CONTACT_TYPE = 'HOMEOWNER' OR CONTACTS.CONTACT_TYPE = 'HOME OWNER' " +
                    "OR CONTACTS.CONTACT_TYPE = 'TENANT'" +
                        "ORDER BY FULL_NAME";

        this.Cursor = Cursors.WaitCursor;
        run_Query_Parm(q);
        this.Cursor = Cursors.Default;
    }

    //Pull data from the database using the parameter field
    private void run_Query_Parm(String q)
    {
        error_message = "";
        try
        {
            OleDbCommand cmd = new OleDbCommand(q, conn);
            OleDbDataAdapter a = new OleDbDataAdapter(cmd);

            DataTable dt = new DataTable();

            a.SelectCommand = cmd;
            a.Fill(dt);

            results.DataSource = dt;
            results.AutoResizeColumns();
        }
        catch (Exception ex)
        {
            error_message = ex.Message;
            MessageBox.Show(error_message);
        }
    }

    //Clear all data from the screen
    private void clearFormToolStripMenuItem_Click(object sender, EventArgs e)
    {
        varReportId = "";
        if (this.results.DataSource != null)
        {
            this.results.DataSource = null;
        }
        else
        {
            this.results.Rows.Clear();
        }
    }

    private void maintenanceToolStripMenuItem_Click(object sender, EventArgs e)
    {
        //Use a variable to hold the SQL statement.
        string inputString = "SELECT Full_Name, First_Name, Last_Name, Company FROM CONTACTS";

        try
        {
            //Create an OleDbCommand object and pass in the SQL statement and OleDbConnection object
            OleDbCommand cmd = new OleDbCommand(inputString, conn);

            //Send the CommandText to the connection, and then build an OleDbDataReader.
            OleDbDataReader reader = cmd.ExecuteReader();

            while (reader.HasRows)
            {
                while (reader.Read())
                {
                    Console.WriteLine("\t{0}\t{1}", reader.GetString(1));
                    reader.NextResult();
                }

            }
            reader.Close();
        }
        catch (Exception ex)
        {
            error_message = ex.Message;
            MessageBox.Show(error_message);
        }
    }

Любая предоставленная помощь будет принята с благодарностью.Заранее спасибо.

1 Ответ

0 голосов
/ 26 ноября 2018

Я нашел проблему.Очевидно, у меня был неправильный синтаксис в моем операторе SELECT.Когда я заменил свой SELECT (показанный в первом примере кода, который я разместил) следующим, он работал нормально:

string inputString = "SELECT Contacts.[Account_Number], " +
            "Contacts.[Full_Name], Contacts.[ID], Contacts.[Street], " +
            "Contacts.[City], Contacts.[State], Contacts.[Zip] FROM Contacts";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...