Не указано значение для одного или нескольких обязательных параметров при инициализации соединения - PullRequest
1 голос
/ 12 апреля 2010

У меня есть приложение на C #, использующее базу данных доступа.

Это приложение отлично работает в отладке и выпуске. Работает на всех версиях Windows. Но происходит сбой на одном компьютере с Windows 7.

Сообщение, которое я получил:

System.Data.OleDb.OleDbException: No value given for one or more required parameters.

РЕДАКТИРОВАТЬ, после некоторой отладки с помощью окна сообщений на компьютере, где возникла проблема, вот код ошибки. Ошибка отлавливается в cmd.ExecuteReader (). Отображается окно сообщения juste before, а следующее - в заголовке, за исключением ниже. Есть идеи?

public List<CoeffItem> GetModeleCoeff()
    {

        List<CoeffItem> list = new List<CoeffItem>();
        try
        {
            OleDbDataReader dr;
            OleDbCommand cmd = new OleDbCommand("SELECT nIDModelAquacad, nIDModeleBorne, fCoefficient FROM tbl_ModelBorne ORDER BY nIDModelAquacad", m_conn);
            MessageBox.Show("Commande SQL créée avec succès");

            dr = cmd.ExecuteReader();

            MessageBox.Show("Exécution du reader sans problème!");

            while (dr.Read())
            {
                list.Add(new CoeffItem(Convert.ToInt32(dr["nIDModelAquacad"].ToString()),
                    Convert.ToInt32(dr["nIDModeleBorne"].ToString()),
                    Convert.ToDouble(dr["fCoefficient"].ToString())));
            }
            MessageBox.Show("Lecture du reader");

            dr.Close();
            MessageBox.Show("Fermeture du reader");
        }
        catch (OleDbException err)
        {
            MessageBox.Show("Erreur dans la lecture des modèles/coefficient: " + err.ToString());
        }
        return list;
    }

Я думаю, что это связано со строкой подключения, но почему только на этом компьютере.

Спасибо за вашу помощь!

EDIT

Вот полное сообщение об ошибке:

См. Конец этого сообщения для получения подробной информации о вызове

Отладка по времени (JIT) вместо этого диалогового окна.

************** Исключительный текст **************

System.Data.OleDb.OleDbException: No value given for one or more required parameters.

   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)

   at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)

   at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)

   at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)

   at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)

   at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)

   at System.Data.OleDb.OleDbCommand.ExecuteReader()

   at DatabaseLayer.DatabaseFacade.GetModeleCoeff()

   at DatabaseLayer.DatabaseFacade.InitConnection(String strFile)

   at CalculatriceCHW.ListeMesure.OuvrirFichier(String strFichier)

   at CalculatriceCHW.ListeMesure.nouveauFichierMenu_Click(Object sender, EventArgs e)

   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)

   at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)

   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)

   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)

   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)

   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)

   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)

   at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)

   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)

   at System.Windows.Forms.Control.WndProc(Message& m)

   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

   at System.Windows.Forms.ToolStrip.WndProc(Message& m)

   at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)

   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Ответы [ 4 ]

3 голосов
/ 12 апреля 2010

Вы не можете избежать пути к файлу.

Вы должны использовать OleDbConnectionStringBuilder, который будет правильно экранировать пути со специальными символами и, вероятно, решит вашу проблему.*

Например:

OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder();
builder.Provider = "Microsoft.Jet.OLEDB.4.0";
builder.DataSource = strFile;
builder["User Id"] = "admin";
0 голосов
/ 14 апреля 2010

Хорошо, вот что случилось.

В базе данных пропущено 2 столбца в одной таблице. Причина? Что ж, в приложении, когда пользователь нажимает кнопку «Создать», создается копия .mdb в папке приложения в папку по выбору пользователя. База данных "модель" в порядке, все столбцы есть, но в скопированном файле отсутствует 2 столбца. Поэтому я провел небольшое исследование, обнаружив, что приложение использует виртуальный магазин Windows 7 вместо каталога с программным файлом. Зачем? Мы думаем, что пользователь сохранил файл прямо в каталоге с программным файлом (что вызывает копирование в виртуальном хранилище) со старой версией приложения (и базы данных). В этот момент виртуальное хранилище использовалось в приоритетном порядке по отношению к файлу программы, и все не работало.

Так что спасибо за вашу помощь, она помогает мне найти проблему!

0 голосов
/ 12 апреля 2010

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

Исходный каталог = YourDBName

0 голосов
/ 12 апреля 2010

Возможно, стоит добавить эту проверку в начало вашего метода, чтобы было проще определить, когда этот метод вызывается неправильно. Не уверен, что это ваша проблема, но это может исключить одну возможную ошибку.

        if (string.IsNullOrEmpty(strFile))
        {
            throw new ArgumentNullException("strFile", "strFile must be set");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...