【问题标题】:Syntax Error on a Sql Parametrized update command - c#Sql 参数化更新命令上的语法错误 - c#
【发布时间】:2013-04-29 09:00:46
【问题描述】:

这是我在 c# 中的第一个 SQL 参数化更新命令,当我执行更新时出现语法错误。

这是我的代码:

    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)中,我认为我无权访问日志以调试查询:(。

非常感谢:)

最好的问候,

尼克斯

【问题讨论】:

  • 错误信息到底是什么?
  • 检查我的答案,您在命令文本中使用双引号

标签: c# .net sql oledb sqlparameter


【解决方案1】:

尝试在UPDATE 语句中使用单引号而不是双引号。最后一行

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

应该是

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

【讨论】:

    【解决方案2】:

    将命令文本更改为

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

    【讨论】:

    • “DbCommand.ExecuteNonQuery();”上出现错误消息,这是一个例外:“语法错误”。 .
    【解决方案3】:

    如果你打印出maRequete,并尝试交互执行它,你会发现SQL语法不正确。您似乎正在使用双引号来表示字符串常量;在 SQL 中,您应该为此使用单引号。您的数据可能包含单引号(即撇号)。在这种情况下,您需要添加和额外的一个,例如

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

    这些只是 SQL 规则。如果要执行查询,您必须为服务器提供有效的语法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多