2013-05-05 69 views
1

這是我在c#中的第一個SQL參數化更新命令,當我執行我的更新時,我有一個語法錯誤。Sql參數化更新命令的語法錯誤 - c#

這裏是我的代碼:

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; 
    } 

任何人有一個想法,哪裏是我的錯?另外,我在一箇舊的DBF文件(Visual FoxPro中)中寫道,我想我沒有登錄權限,以便調試查詢:(。

感謝很多:)

最好的問候,

Nixeus

+0

準確的錯誤信息是什麼? – 2013-05-05 12:43:24

+0

「語法錯誤」。 – 2013-05-05 12:45:10

+0

檢查我的答案,你正在使用命令文本 – 2013-05-05 12:53:24

回答

1

嘗試在UPDATE聲明,而不是雙引號用單引號。最後一行

+ "eveinterv = @eveinterv where eveNum = " + '"' + strEvtNumeroString.ToString() + '"'; 

應該

+ "eveinterv = @eveinterv where eveNum = '" + strEvtNumeroString.ToString() + "'"; 
+0

我使用雙qoutes,我做了修改,同樣的錯誤:語法錯誤:( – 2013-05-05 13:09:37

1

改變您的命令文本

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

或更好,更改爲使用'where'過濾器的參數... – 2013-05-05 12:55:52

+0

我做了修改,同樣的錯誤:語法錯誤:( – 2013-05-05 13:09:17

+0

什麼是語法錯誤和哪一行 – 2013-05-05 13:21:52

0

如果打印出來maRequete,並嘗試以交互方式執行它,你會發現SQL語法不正確。看起來您可能使用雙引號來表示字符串常量;在SQL中,您應該使用單引號。您的數據可能包含單引號(即撇號)。在這種情況下,您需要添加額外的例如

INSERT ... values ('you''ll need two apostrophes for this'); 

這些只是SQL規則。如果要執行查詢,則必須爲服務器提供有效的語法。