2013-05-05 62 views
3

我想爲一個DBF文件(Visual Fox Pro)SQL參數化更新命令 我不知道爲什麼,但我有一個「語法錯誤」的「DbCommand .ExecuteNonQuery();」。Sql參數化與VFP的語法錯誤OleDb

異常錯誤消息是「語法錯誤」。我沒有任何額外的信息。

string maRequete = "UPDATE " + strNomTable + " set " 
+ "evetype = @evetype ," 
+ "evedes = @evedes ," 
+ "evecli = @evecli ," 
+ "eveusermo = @eveusermo ," 
+ "eveinterv = @eveinterv where eveNum = '" + strEvtNumeroString.ToString() + "'"; 

OleDbCommand DbCommand = new OleDbCommand(maRequete); 

DbCommand.Parameters.Add("@evetype", OleDbType.VarChar); 
DbCommand.Parameters.Add("@evedes", OleDbType.VarChar); 
DbCommand.Parameters.Add("@evecli", OleDbType.VarChar); 
DbCommand.Parameters.Add("@eveusermo", OleDbType.VarChar); 
DbCommand.Parameters.Add("@eveinterv", OleDbType.VarChar); 


DbCommand.Parameters["@evetype"].Value = m_strEvtType.ToString().Trim(); 
DbCommand.Parameters["@evedes"].Value = m_strDesignation.ToString().Trim(); 
DbCommand.Parameters["@evecli"].Value = m_strCodeClient.ToString().Trim(); 
DbCommand.Parameters["@eveusermo"].Value = m_strUserModification; 
DbCommand.Parameters["@eveinterv"].Value = m_strCodeIntervenant.ToString().Trim(); 


try 
{ 
    string strStringConnect = @"Provider=vfpoledb.1;Data Source=" + m_strDirectoryDBF + @"\" + strDbfFile + ".dbf;Collating Sequence=general"; 
    OleDbConnection DbConnection = new OleDbConnection(strStringConnect); 

    DbCommand.CommandType = System.Data.CommandType.Text; 

    DbConnection.Open(); 
    DbCommand.Connection = DbConnection; 

    DbCommand.ExecuteNonQuery(); 
    return "O"; 
} 
catch (Exception Ex) 
{ 
    return Ex.Message; 
} 

我試圖用一個參數 「在哪裏」 的聲明,並沒有改變:(

任何人有想法嗎?

感謝很多:)

回答

3

VFP不支持帶@符號的「命名」參數。相反,只需更改爲「?」作爲參數的持有者。然後,確保您的參數以與它們在sql命令中出現的完全相同的順序添加。你非常接近。

甚至可以在WHERE子句中使用eveNum值的參數。

string maRequete = "UPDATE " + strNomTable + " set " 
+ "evetype = ?," 
+ "evedes = ?," 
+ "evecli = ?," 
+ "eveusermo = ?," 
+ "eveinterv = ? where eveNum = ?"; 

OleDbCommand DbCommand = new OleDbCommand(maRequete); 

DbCommand.Parameters.Add("Varevetype", OleDbType.VarChar); 
DbCommand.Parameters.Add("Varevedes", OleDbType.VarChar); 
DbCommand.Parameters.Add("Varevecli", OleDbType.VarChar); 
DbCommand.Parameters.Add("Vareveusermo", OleDbType.VarChar); 
DbCommand.Parameters.Add("Vareveinterv", OleDbType.VarChar); 
DbCommand.Parameters.Add("VarWhere", OleDbType.VarChar); 


DbCommand.Parameters["Varevetype"].Value = m_strEvtType.ToString().Trim(); 
DbCommand.Parameters["Varevedes"].Value = m_strDesignation.ToString().Trim(); 
DbCommand.Parameters["Varevecli"].Value = m_strCodeClient.ToString().Trim(); 
DbCommand.Parameters["Vareveusermo"].Value = m_strUserModification; 
DbCommand.Parameters["Vareveinterv"].Value = m_strCodeIntervenant.ToString().Trim(); 
DbCommand.Parameters["VarWhere"].Value = strEvtNumeroString.ToString().Trim(); 
+0

適合我。 +1 – 2013-07-18 00:13:44