OleDb возвращает System.Data.OleDb.OleDbException: «Не задано значение для одного или нескольких обязательных параметров». при использовании параматеризованного SQL - PullRequest
0 голосов
/ 08 ноября 2018

Я получаю System.Data.OleDb.OleDbException: «Не задано значение для одного или нескольких обязательных параметров».но я даю ему значение, как вы можете видеть в моем коде:

private void PopWeapSel(string[] read)
{
    string[] weapID = read;
    string weapDam = "";
    string weapPat = "";
    string weapHeat = "";
    string weapName = "";
    OleDbConnection dbConn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=BHShooterProjectDB.accdb");
    string sql = "SELECT ItemWeaponType.WeaponID, ItemWeaponType.WeaponDamage, ItemWeaponType.WeaponPattern, ItemWeaponType.WeaponHeatValue, ItemWeaponType.WeaponCoolRate, ItemWeaponType.WeaponName FROM ItemWeaponType WHERE ItemWeaponTypeWeaponID = @PU;";
    OleDbCommand cmd = new OleDbCommand(sql, dbConn);
    foreach (string WeapID in weapID)
    {
        if (WeapID == "")
        {
            return;
        }
        cmd.Parameters.AddWithValue("@PU", WeapID); ///Problem Line
        dbConn.Open();
        OleDbDataReader reader = cmd.ExecuteReader();

        if (reader.Read())
        {
            weapDam = reader[1].ToString();
            weapPat = reader[2].ToString();
            weapHeat = reader[3].ToString();
            weapName = reader[4].ToString();
        }
        dbConn.Close();
        this.DGV_WS.Rows.Add(weapDam, weapPat, weapHeat, weapName);
    }
}

Когда я смотрю на местных жителей в отладке.WeapID имеет значение «1», как и должно быть.Я что-то пропустил с точки зрения синтаксиса?

Спасибо!

1 Ответ

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

Переместите строку OleDbCommand cmd = new OleDbCommand(sql, dbConn); в оператор foreach.

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

...