带串联的 OracleCommand 参数
OracleCommand Parameter with concatenation
这有效:
OracleCommand cm = con.CreateCommand();
cmd.CommandText = String.Format("select s,e from {0}" + ".DTREE where DATAID=:pDataId", credentialsthing.dbschema");
cmd.Parameters.Add("pDataId", objectx.theid);
但是...我也想把第一个放在参数命令中:
cmd.CommandText = "select s,e from :pPar1" + ".DTREE where DATAID=:pDataId");
cmd.Parameters.Add("pPar1", credentialsthing.dbschema);
cmd.Parameters.Add("pDataId", objectx.theid);
这失败了。为什么,语法应该是什么?
您的不能参数化您的table名称、列名称或任何其他数据库对象。
您只能参数化您的值。这就是为什么您需要为您的 table 名称使用字符串连接。
但是你应该非常这样做,你需要为你的table名字提供强有力的验证或者应该使用某种形式的白名单。
这有效:
OracleCommand cm = con.CreateCommand();
cmd.CommandText = String.Format("select s,e from {0}" + ".DTREE where DATAID=:pDataId", credentialsthing.dbschema");
cmd.Parameters.Add("pDataId", objectx.theid);
但是...我也想把第一个放在参数命令中:
cmd.CommandText = "select s,e from :pPar1" + ".DTREE where DATAID=:pDataId");
cmd.Parameters.Add("pPar1", credentialsthing.dbschema);
cmd.Parameters.Add("pDataId", objectx.theid);
这失败了。为什么,语法应该是什么?
您的不能参数化您的table名称、列名称或任何其他数据库对象。
您只能参数化您的值。这就是为什么您需要为您的 table 名称使用字符串连接。
但是你应该非常这样做,你需要为你的table名字提供强有力的验证或者应该使用某种形式的白名单。