2017-04-02 32 views
1
public static string storeAvatar(string avatar, string gender, string species, int playerforeignkey) 
{ 
    try 
    { 
     OleDbConnection myConnection = GetConnection(); 
     OleDbCommand dbCommand = new OleDbCommand(); 

     dbCommand.CommandText = "INSERT INTO AVATARS ([AVATAR_ID],[AVATAR],[DOB],[STRENGTH],[GENDER],[HOARD],[SPECIES], [METAMORPHOSED], [COST],[PLAYERID_FK]) values (?,?,?,?,?,?,?,?,?,?)"; // command to get high score data 
     dbCommand.Parameters.AddWithValue("@id", "AVATARS_SEQ.NEXTVAL"); 
     dbCommand.Parameters.AddWithValue("@avatar", avatar); 
     dbCommand.Parameters.AddWithValue("@date", "TO_CHAR(" + DateTime.Now.ToString("dd/mm/yyyy")+")"); 
     dbCommand.Parameters.AddWithValue("@strength", 0); 
     dbCommand.Parameters.AddWithValue("@gender", gender); 
     dbCommand.Parameters.AddWithValue("@hoard", 0); 
     dbCommand.Parameters.AddWithValue("@species", species); 
     dbCommand.Parameters.AddWithValue("@meta", 0); 
     dbCommand.Parameters.AddWithValue("@cost", 0); 
     dbCommand.Parameters.AddWithValue("@playerfk", playerforeignkey); 
     dbCommand.Connection = myConnection; 
     myConnection.Open(); 
     dbCommand.ExecuteNonQuery(); 
     myConnection.Close(); 
    } 
    catch (Exception ex) 
    { 

    } 
    return "ERROR"; 
} 

异常错误说我需要错过SELECT关键字,但是我想INSERT而不是SELECT为什么我在数据库插入命令中遇到异常错误?

EXCEPTION =“一个或多个错误 命令的处理过程中出现\ r \诺拉-00928:缺少SELECT关键字”

+2

你能分享精确的异常消息?查询中的参数被称为'?,?,?,?,?,?,?,?',它是故意的吗?您需要在那里使用实际的命令名称。 –

回答

0

首先,更新的命令文本使用实际的参数名称和第二,使用参数的目的也是为了避免SQL注入,你试图用你的参数。

不需要@id参数,因为该值可以直接放入字符串中,就像TO_CHAR函数一样。

//..other code removed for brevity 
dbCommand.CommandText = "INSERT INTO AVATARS ([AVATAR_ID],[AVATAR],[DOB],[STRENGTH],[GENDER],[HOARD],[SPECIES], [METAMORPHOSED], [COST],[PLAYERID_FK]) VALUES (AVATARS_SEQ.NEXTVAL,@avatar,TO_CHAR(@date),@strength,@gender,@hoard,@species,@meta,@cost,@playerfk)"; 
dbCommand.Parameters.AddWithValue("@avatar", avatar); 
dbCommand.Parameters.AddWithValue("@date", DateTime.Now.ToString("dd/mm/yyyy")); 
dbCommand.Parameters.AddWithValue("@strength", 0); 
dbCommand.Parameters.AddWithValue("@gender", gender); 
dbCommand.Parameters.AddWithValue("@hoard", 0); 
dbCommand.Parameters.AddWithValue("@species", species); 
dbCommand.Parameters.AddWithValue("@meta", 0); 
dbCommand.Parameters.AddWithValue("@cost", 0); 
dbCommand.Parameters.AddWithValue("@playerfk", playerforeignkey); 
//..other code removed for brevity 

事实上我甚至会建议所有的常数值被直接放入查询和减少参数,只希望频繁更换的。

例如

//..other code removed for brevity 
dbCommand.CommandText = "INSERT INTO AVATARS ([AVATAR_ID],[AVATAR],[DOB],[STRENGTH],[GENDER],[HOARD],[SPECIES], [METAMORPHOSED], [COST],[PLAYERID_FK]) 
VALUES (AVATARS_SEQ.NEXTVAL,@avatar,TO_CHAR(@date),0,@gender,0,@species,0,0,@playerfk)"; 
dbCommand.Parameters.AddWithValue("@avatar", avatar); 
dbCommand.Parameters.AddWithValue("@date", DateTime.Now.ToString("dd/mm/yyyy")); 
dbCommand.Parameters.AddWithValue("@gender", gender); 
dbCommand.Parameters.AddWithValue("@species", species); 
dbCommand.Parameters.AddWithValue("@playerfk", playerforeignkey); 
//..other code removed for brevity 
相关问题