C#Ole.DB错误

C#Ole.DB错误,c#,C#,我正在用C#创建一个程序来帮助跟踪我的所有信息,而不是为我的DND类型的游戏写下来。我能够插入和删除新的球员没有任何问题,但当涉及到更新球员,这是我得到的错误 “查询表达式'@newPlayerName playerLevel=@newPlayerLevel heroID=@newHeroId playerInventoryID=@newPlayerInventoryID=@newPlayerInventoryID=@newCampaignID'中出现语法错误(缺少运算符)。” 这是我的更新方法

我正在用C#创建一个程序来帮助跟踪我的所有信息,而不是为我的DND类型的游戏写下来。我能够插入和删除新的球员没有任何问题,但当涉及到更新球员,这是我得到的错误

“查询表达式'@newPlayerName playerLevel=@newPlayerLevel heroID=@newHeroId playerInventoryID=@newPlayerInventoryID=@newPlayerInventoryID=@newCampaignID'中出现语法错误(缺少运算符)。”

这是我的更新方法代码

    public static Boolean UpdatePlayer(Player oldPlayer,
        Player newPlayer)
    {
        OleDbConnection connection = DBConnection.GetConnection();
        OleDbCommand command;
        string statement =
            "UPDATE Player SET " +
            "playerName = @newPlayerName " +
            "playerLevel = @newPlayerLevel " +
            "heroID = @newHeroId " +
            "playerInventoryID = @newPlayerInventoryID " +
            "campaignID = @newCampaignID " +
            "WHERE ID = @oldID " +
            "AND playerName = @oldPlayerName " +
            "AND playerLevel = @oldPlayerLevel " +
            "AND heroID = @oldHeroID " +
            "AND playerInventoryID = @oldPlayerInventoryID " +
            "AND campaignID = @oldCampaignID ";

        command = new OleDbCommand(statement, connection);
        command.Parameters.AddWithValue("@newPlayerName", newPlayer.PlayerName);
        command.Parameters.AddWithValue("@newPlayerLevel", newPlayer.Level);
        command.Parameters.AddWithValue("@newHeroID", newPlayer.HeroID);
        command.Parameters.AddWithValue("@newPlayerInventoryID", newPlayer.PlayerInventoryID);
        command.Parameters.AddWithValue("@newCampaignID", newPlayer.CampaignID);
        command.Parameters.AddWithValue("@oldID", oldPlayer.ID);
        command.Parameters.AddWithValue("@oldPlayerName", oldPlayer.PlayerName);
        command.Parameters.AddWithValue("@oldPlayerLevel", oldPlayer.Level);
        command.Parameters.AddWithValue("@oldHeroID", oldPlayer.HeroID);
        command.Parameters.AddWithValue("@oldPlayerInventoryID", oldPlayer.PlayerInventoryID);
        command.Parameters.AddWithValue("@oldCampaignID", oldPlayer.CampaignID);

        try
        {
            connection.Open();
            int count = command.ExecuteNonQuery();
            if (count > 0)
                return true;
            else
                return false;
        }
        catch (OleDbException e)
        {
            throw e;
        }
        finally
        {
            connection.Close();
        }
    }
下面是调用该函数的代码

private void SavePlayers()
    {
        if (lstPlayers.SelectedIndex > -1)
        {
            int parsedInt;
            Player edititedPlayer = new Player();
            edititedPlayer.PlayerName = txtPlayerName.Text;
            edititedPlayer.HeroID =
                heroes[cboHero.SelectedIndex].ID;
            edititedPlayer.CampaignID =
                campaigns[lstCampaigns.SelectedIndex].ID;
            edititedPlayer.ID = players[lstPlayers.SelectedIndex].ID;
            edititedPlayer.PlayerInventoryID = 
                players[lstPlayers.SelectedIndex].PlayerInventoryID;
            if (Int32.TryParse(txtPlayerLevel.Text, out parsedInt))
            {
                edititedPlayer.Level = parsedInt;
                PlayerDB.UpdatePlayer((Player)lstPlayers.SelectedItem,
                    edititedPlayer);                                       
            }
        }
添加逗号

string statement =
    "UPDATE Player SET " +
    "playerName = @newPlayerName, " +
    "playerLevel = @newPlayerLevel, " +
    "heroID = @newHeroId, " +
    "playerInventoryID = @newPlayerInventoryID, " +
    "campaignID = @newCampaignID " +
    "WHERE ID = @oldID " +
    "AND playerName = @oldPlayerName " +
    "AND playerLevel = @oldPlayerLevel " +
    "AND heroID = @oldHeroID " +
    "AND playerInventoryID = @oldPlayerInventoryID " +
    "AND campaignID = @oldCampaignID ";

更新的字段之间缺少所有逗号

  string statement = 
        "UPDATE Player SET " + 
        "playerName = @newPlayerName, " + 
        "playerLevel = @newPlayerLevel, " + 
        "heroID = @newHeroId, " + 
        "playerInventoryID = @newPlayerInventoryID, " + 
        "campaignID = @newCampaignID " + 
        "WHERE ID = @oldID " + 
        "AND playerName = @oldPlayerName " + 
        "AND playerLevel = @oldPlayerLevel " + 
        "AND heroID = @oldHeroID " + 
        "AND playerInventoryID = @oldPlayerInventoryID " + 
        "AND campaignID = @oldCampaignID "; 

我想补充一点,我已经检查了数据库中的所有名称,它们与我这里的名称匹配(明显区分大小写)。我知道在VB中,我们会使用一个参数来指定每个变量的数据类型。我在c#书中没有看到这些例子,所以我假设它们是不需要的。我在你的SQLWow中没有看到任何逗号。史蒂夫,我现在觉得自己像个白痴,罗夫,非常感谢你的快速回复。看了几个小时的代码都没注意到。顺便说一下,我试图给你+1,但是我的代表不够高,对不起。。。但非常感谢您的回复。很抱歉,之前没有注意到您的帖子。。谢谢你的回答。我再次尝试+1你,但我的代表不够高:(