ج # مايكروسوفت الوصول معلمات الاستعلامات لا تقوم بعملها

StackOverflow https://stackoverflow.com//questions/25029197

سؤال

لقد أجريت بالفعل بحثا في هذا ، وعلى الرغم من أن الأسئلة أدناه متشابهة ، فقد جربتها جميعا ، ولكن لا يبدو أن أيا منها يحل مشكلتي.

الطريقة الصحيحة للحصول على البيانات من قاعدة بيانات الوصول

استخدام المعلمات إدخال البيانات في قاعدة بيانات الوصول

الحصول على البيانات من الوصول إلى مربع نص في ج # بالنقر فوق زر

تحديث الاستعلام على قاعدة بيانات الوصول لا يعمل C#.NET

تمرير المعلمة للوصول إلى الاستعلام من ج#

استعلام معلمات لإدخال القيم

هنا هو جزء من التعليمات البرمجية ذات الصلة:

private void LoadDetails(int index)
{
    try
    {
        connection.Open();
        command = new OleDbCommand("SELECT * from tagsTbl WHERE ID=@1", connection);
        command.Parameters.AddWithValue("@1", index);
        reader = command.ExecuteReader();
        while (reader.Read())
        {
            nameTextBox.Text = reader["leName"].ToString();
            altTextBox.Text = reader["altName"].ToString();
            unitTextBox.Text = reader["currUnit"].ToString();
            tagTextBox.Text = reader["currTag"].ToString();
            oldTextBox.Text = reader["oldTag"].ToString();
            descTextBox.Text = reader["currDesc"].ToString();
        }
        connection.Close();
    }
    catch
    {
        connection.Close();
        MessageBox.Show(errortxt);
        Application.Exit();
    }
}

private void testWin_Load(object sender, EventArgs e)
{
    loadFileDialog.ShowDialog();
    connection = new OleDbConnection(strConn);
    if (!blnLoaded)
        Application.Exit();
    else
    {
        errortxt = "Attempt to establish connection to database failed!";
        LoadDetails(testInt);
        this.Show();
    }
}

private void loadFileDialog_FileOk(object sender, CancelEventArgs e)
{
    strConnPath = loadFileDialog.FileName;
    strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strConnPath;
    blnLoaded = true;
}

private void prevButton_Click(object sender, EventArgs e)
{
    if (testInt > 1)
        testInt--;
    LoadDetails(testInt);
    gotoNumericUpDown.Value = testInt;
}

private void nextButton_Click(object sender, EventArgs e)
{
    testInt++;
    errortxt = "You cannot go higher than that!";
    try
    {
        LoadDetails(testInt);
        gotoNumericUpDown.Value = testInt;
    }
    catch
    {
        testInt--;
    }
}

private void gotoButton_Click(object sender, EventArgs e)
{
    try
    {
        testInt = (int)gotoNumericUpDown.Value;
        LoadDetails(testInt);
    }
    catch 
    { 

    }
}

private void nameSearchButton_Click(object sender, EventArgs e)
{
    try
    {
        connection.Open();
        command = new OleDbCommand("SELECT * from tagsTbl WHERE leName='@name'", connection);
        command.CommandType = CommandType.Text;
        command.Parameters.AddWithValue("@name", namesTextBox.Text);
        reader = command.ExecuteReader();
        while (reader.Read())
        {
            nameTextBox.Text = reader["leName"].ToString();
            altTextBox.Text = reader["altName"].ToString();
            unitTextBox.Text = reader["currUnit"].ToString();
            tagTextBox.Text = reader["currTag"].ToString();
            oldTextBox.Text = reader["oldTag"].ToString();
            descTextBox.Text = reader["currDesc"].ToString();
        }
        connection.Close();
      }
      catch
      {
          connection.Close();
      }
}

private void tagSearchButton_Click(object sender, EventArgs e)
{
    try
    {
        command = new OleDbCommand("SELECT * from tagsTbl WHERE currTag='@1'", connection);
        command.Parameters.AddWithValue("@1", tagsTextBox.Text);
        connection.Open();
        MessageBox.Show(command.CommandText);
        reader = command.ExecuteReader();
        while (reader.Read())
        {
            nameTextBox.Text = reader["leName"].ToString();
            altTextBox.Text = reader["altName"].ToString();
            unitTextBox.Text = reader["currUnit"].ToString();
            tagTextBox.Text = reader["currTag"].ToString();
            oldTextBox.Text = reader["oldTag"].ToString();
            descTextBox.Text = reader["currDesc"].ToString();
        }
        connection.Close();
    }
    catch
    {
        connection.Close();
    }
}

لقد أعلنت متغيرات الفئة التالية وفقا لذلك:

private string strConnPath = "";
private string strConn = "";
private bool blnLoaded = false;
OleDbConnection connection;
OleDbDataReader reader;
OleDbCommand command;
private string errortxt = "";
int testInt = 1;

هذا هو وضعي الحالي:

المشكلة هي أن الكود داخل تفاصيل التحميل() يعمل على ما يرام ، ويتم تشغيله على تحميل النموذج.يمكن استخدام هذا الرمز مرارا وتكرارا حتى الآن دون مشاكل ، ولكن عندما أحاول تشغيل الاستعلامات الأخرى ، فإنها "تفشل".ليس كما هو الحال في فشل صريح ورمي الاستثناءات ، ولكن بدلا من ذلك ، فإن استعلامات معلمات أستخدمها داخل تلك المنطقة (الوسمزر البحث_انقر و الاسمزر البحث _انقر), ، لن تحل محل المعلمات.

هذا لي الخلط ، لأنه يفعل ما ينبغي في تفاصيل التحميل() الطريقة.إذا قمت بتغيير نص الأمر يدويا أثناء تصحيح الأخطاء ، عن طريق استبدال المعلمة يدويا بالقيمة ، فسيعمل البرنامج كما ينبغي ، ويعيد القيم التي تم إرجاعها باستخدام العبارة.

ما الذي يسبب أوليدبكوماند.المعلمة.أدويثفالو وظيفة لا تعمل على النحو المنشود?

مزيد من التفاصيل:

على سبيل المثال ، أنا أستخدم هذا الخط:

command = new OleDbCommand("SELECT * from tagsTbl WHERE leName='@name'", connection);

لذلك سيعطي الأمر هذه السلسلة في الوقت الحالي:

اختر * من تاغستبل حيث لينام= '@اسم'

ما يجب أن يفعله الاستعلام المعلمة هو تغيير @الاسم إلى ما هو في نامستكستبوكس, ، على النحو التالي:

command.Parameters.AddWithValue("@name", namesTextBox.Text);

لنفترض أنني أعطيت مربع النص قيمة إدخال "جينسميث".لذلك يجب تغيير الأمر إلى:

اختر * من تاغستبل حيث لينام= 'جين_سميث'

لكنه بدلا من ذلك لا يفعل شيئا ، لذلك لا يزال الأمر:

اختر * من تاغستبل حيث لينام= '@اسم'

معلومات أخرى ربما ذات صلة:

لقد قرأت للتو هذا السؤال, ، ولكنها ليست القضية التي أواجهها.أنا باستخدام مايكروسوفت أكسس 2013.أنا اخترت استخدام قاعدة بيانات مس أسيس لبرنامجي في ضوء حقيقة أنه من الأسهل لتشغيل" مستقل " ، مع العميل تتطلب فقط لتثبيت محرك قاعدة بيانات الوصول المجاني ، إذا لم يكن لديهم مس أوفيس مثبتة.هذا البرنامج يعمل حاليا.

حل المشكلة بفضل روميت بارخية!(لقد تعلمت أيضا أن تنسيق الاستعلام ميسكل وتنسيق الاستعلام أوليدب ل مس أسيس يختلف أيضا.كنت أستخدم تنسيق الاستعلام الخلية في الأصل.)

هل كانت مفيدة؟

المحلول

لا تحتاج إلى وضع ' (علامات اقتباس مفردة) حول المعلمة المسماة في استعلامك.تحديد ذلك ، كلر يعتبرها سلسلة.مجرد إزالة تلك الاقتباسات حولها @name وينبغي أن تعمل كما هو متوقع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top