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