0

我正在尝试使用 OleDb 和 .Net4.5 更新数据库。

我的更新运行良好,即使我在字段上使用简单引号,但是,当我在字段上输入双引号时,由于这个双引号,oledb 会引发异常。

这是一个请求示例:

string strRequest = "update " + strNomTable.Trim() + " set "
+ "evenotes = " + '"' + m_strNote.ToString().Trim() + '"' 
+ " where eveNum = " + '"' + strEvtNumeroString.Trim() + '"';

您知道如何避免简单和双引号吗?注意:我尝试使用 SQL 参数化更新,但我的数据库似乎不支持这一点。

非常感谢,

此致,

尼克修斯

4

1 回答 1

1

我想到了几个选项。由于我不知道您使用的是哪种数据库,我只是猜测:

  1. 使用参数。我知道你已经尝试过了,但我建议你再试一次。如果失败,请尝试以下操作:
  2. 删除“where”的逗号(一行!)。
  3. 将 SQL 语句中的所有双引号更改为单引号。文字应该是引号"'" + m_strNote.ToString().Trim() + "'",而不是'"' + m_strNote.ToString().Trim() + '"'
  4. 将值中的所有单引号 (') 替换为双单引号 (''):"'" + m_strNote.ToString().Trim().Replace("'", "''") + "'"

如果您将选项 2 到 4 结合起来,您将得到:

string strRequest = "update " + strNomTable.Trim() + " set "
+ "evenotes = '" + m_strNote.ToString().Trim().Replace("'", "''") + "' "
+ "where eveNum = '" + strEvtNumeroString.Trim().Replace("'", "''") + "'";

Visual Fox Pro 数据库和 OleDbParameters

您可以使用 OleDbParameters。名称以 . 开头@。所以:

OleDbCommand command = new OleDbCommand(
    "update " + strNomTable.Trim() + " set "
    + "evenotes = @evenotes "
    + "where eveNum = @eveNum");
command.Parameters.AddWithValue("@evenotes", m_strNote.ToString().Trim());
command.Parameters.AddWithValue("@eveNum", strEvtNumeroString.Trim());
于 2013-05-05T18:23:52.610 回答