在SQL参数值周围添加引号?

时间:2018-05-21 16:03:57

标签: c# oracle ado.net sql-injection

我不确定是否应该在SQL参数周围添加单引号'',因为它是一个已经填充了数据的字符串值。我的想法是我没有,因为通过使用OracleParameter构造函数,它会自动将其数据类型更改为字符串。

具体来说,我应该这样做:'@c'执行此操作后只需@cSELECT @c FROM Dual@c已经放入OracleParameter时已经是字符串string calcDateFormat = "Some Data"; try { string sql = "SELECT @c ColumnName FROM Dual"; // Or should it be this string sql = "SELECT '@c' ColumnName FROM Dual"; using(OracleCommand command = new OracleCommand(sql, this.Connection)) { OracleDataAdapter adapter = new OracleDataAdapter(command); adapter.SelectCommand.Parameters.Add(new OracleParameter("@c", OracleDbType.Varchar2, calcDateFormat, ParameterDirection.Output)); DataSet dataset = new DataSet(); adapter.Fill(dataset); return dataset; } } catch (OracleException ex) { throw ... } // SELECT => // Column: ColumnName // Row: Some Data 构造函数?

string A = "A";
string A1 = "A";
string B = "AB".Substring(0,1);

Console.WriteLine("{0}", object.ReferenceEquals(A, A1));  //Returns True

Console.WriteLine("{0}", object.ReferenceEquals(A, B));  //Returns Flase

2 个答案:

答案 0 :(得分:1)

我认为你可以将它保持为string sql = "SELECT @c FROM Dual";而不使用单引号。这至少是我在PHP中编写SQL查询的方式。但我不知道C#和Oracle的规则是否不同。

回答问题的最佳机会是尝试两种方法,看看会发生什么。

答案 1 :(得分:1)

不需要添加引号,因为下面的代码可以正常工作,

 string sql = "SELECT @c ColumnName FROM Dual";

原因是如果您编写'@c',它将在您声明参数的位置搜索匹配的参数名称,并且它不会与查询中断相匹配。