2017-04-02 37 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 
相關問題