参数化查询以创建抛出丢失用户或角色名称异常的用户
Parameterized queries to create a user throwing missing user or role name exception
我正在尝试 运行 使用 Oracle.ManagedDataAccess 库对 Oracle 12 数据库进行 CREATE USER
查询。此查询无需使用命名参数即可完美运行。但是当我尝试使用命名参数时,看起来参数没有正确传递给查询。
我尝试使用以下代码的参数(注意:我使用 Oracle.ManagedDataAccess 库):
using(OracleConnection con = new OracleConnection(_connectionString)) {
con.Open();
using(OracleCommand cmd = con.CreateCommand()) {
cmd.CommandText = "CREATE USER :username IDENTIFIED BY :password";
cmd.Parameters.Add("username", "A_TESTUSER");
cmd.Parameters.Add("password", "A_PASSWORD");
//cmd.Parameters.Add(":username", "A_TESTUSER"); <- also tried
//cmd.Parameters.Add(":password", "A_PASSWORD"); <- also tried
//cmd.Parameters.Add(":username", OracleDbType.Varchar2).Value = "A_TESTUSER"; <- also tried
//cmd.Parameters.Add(":password", OracleDbType.Varchar2).Value = "A_TESTPASS"; <- also tried
cmd.ExecuteNonQuery();
}
}
这会导致以下异常。
Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01935: missing user or role name.
当我设置时查询有效 运行 像这样内联数据的查询
cmd.CommandText = "CREATE USER A_TESTUSER IDENTIFIED BY A_PASSWORD";
我也试过用@
代替:
来表示参数,但没有成功。我应该如何将参数传递给查询?
我认为您不能为 CREATE USER
使用参数化 查询 ,所以应该
cmd.CommandText = String.Format("CREATE USER {0} IDENTIFIED BY \"{1}\"", "A_TESTUSER", "A_PASSWORD");
注意: 虽然此解决方案有效,但它不能保护您免受 SQL 注入。除此之外,您还应该对您的输入进行必要的检查。
我正在尝试 运行 使用 Oracle.ManagedDataAccess 库对 Oracle 12 数据库进行 CREATE USER
查询。此查询无需使用命名参数即可完美运行。但是当我尝试使用命名参数时,看起来参数没有正确传递给查询。
我尝试使用以下代码的参数(注意:我使用 Oracle.ManagedDataAccess 库):
using(OracleConnection con = new OracleConnection(_connectionString)) {
con.Open();
using(OracleCommand cmd = con.CreateCommand()) {
cmd.CommandText = "CREATE USER :username IDENTIFIED BY :password";
cmd.Parameters.Add("username", "A_TESTUSER");
cmd.Parameters.Add("password", "A_PASSWORD");
//cmd.Parameters.Add(":username", "A_TESTUSER"); <- also tried
//cmd.Parameters.Add(":password", "A_PASSWORD"); <- also tried
//cmd.Parameters.Add(":username", OracleDbType.Varchar2).Value = "A_TESTUSER"; <- also tried
//cmd.Parameters.Add(":password", OracleDbType.Varchar2).Value = "A_TESTPASS"; <- also tried
cmd.ExecuteNonQuery();
}
}
这会导致以下异常。
Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01935: missing user or role name.
当我设置时查询有效 运行 像这样内联数据的查询
cmd.CommandText = "CREATE USER A_TESTUSER IDENTIFIED BY A_PASSWORD";
我也试过用@
代替:
来表示参数,但没有成功。我应该如何将参数传递给查询?
我认为您不能为 CREATE USER
使用参数化 查询 ,所以应该
cmd.CommandText = String.Format("CREATE USER {0} IDENTIFIED BY \"{1}\"", "A_TESTUSER", "A_PASSWORD");
注意: 虽然此解决方案有效,但它不能保护您免受 SQL 注入。除此之外,您还应该对您的输入进行必要的检查。