【问题标题】:SQL query statement in excel sheetexcel表格中的SQL查询语句
【发布时间】:2012-07-09 11:27:15
【问题描述】:

我有一个如下形式的 SQL 查询:

Update TableName Set TaskStatus=xxx where TaskID=xx;

我的 C# 代码中有这个 SQL 查询。

在一个 Excel 文件中,在 B 单元格下,我有一组语句,如 Rejected、Completed、Closed 等。我的 C# 代码读取这些单元格并采取适当的措施。例如,如果它读取已完成,则执行以下查询:

Update TableName Set TaskStatus=Completed where TaskID=xx;

我的问题是,在一个单元格中,我的值无法完成。当我的代码读取此单元格并将其合并到查询中时,

 Update TableName Set TaskStatus=Can't Complete where TaskID=xx;

它会抛出一个错误,指出“应该关闭引号” 它假设 Can't 中的引号作为 SQL 关键字或 SQL 引号。我该如何克服这个问题?

【问题讨论】:

  • 您需要引用并转义该值,即Update TableName Set TaskStatus='Can''t Complete' where TaskID=xx; - 用单引号括起来并将字符串中的任何单引号加倍。组装 SQL 的代码在哪里 - 你能做到吗?实际上,如果您的查询在您的 C# 代码中,您应该使用参数化查询,这样您就可以将值传递给 Oracle,而无需将其插入到您的字符串中。
  • @Rup 它有效......你没有把它作为答案发布吗?我会接受它..
  • 作为评论发布是因为我不确定您是在 Excel 中还是在 C# 代码中生成 SQL - 我可能只是没有很好地阅读这个问题。但是,您应该在 Csabo 的答案中使用参数化查询。

标签: c# .net sql oracle


【解决方案1】:

AFAIK 使用参数化的 SQL 命令解决了这个问题,sincs SqlParameter 对象在这些情况下为你做excaping。您的代码中的类似内容应该可以解决您的问题:

string sql = "Update TableName Set TaskStatus=@status where TaskID=@id;";
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
cmd.Parameters.AddWithValue("status", status_excel_call_value);
cmd.Parameters.AddWithValue("id", your_task_id);

cmd.ExecuteNonQuery();

【讨论】:

  • 另外,停止注射更安全
【解决方案2】:

您可以将' 替换为''。引号定义了一个文本,因此您的代码会打开,但不会通过插入 Can't 来关闭文本“区域”。

【讨论】:

  • 嗨..我得到一个错误“引用的字符串没有正确终止”..我所做的只是在excel表的单元格中将文本更改为CAN'''T COMPLETE
  • 其实只有两个引号就够了...不能补全....三个引号不行:)
  • 哦,对不起,我输入了三个引号,它必须是两个。 (第一个将转义以下)
猜你喜欢
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2016-12-23
  • 2013-12-06
相关资源
最近更新 更多