获取价值而不是整个查询

时间:2016-01-13 13:01:49

标签: c# asp.net oracle

我想将加密密码的值转换为字符串变量。但是我得到了整个查询。

这是我的代码: -

string strpassword = "select  sys.get_enc_val ('" + txtpassword.Text + "', 'F20FA982B4C2C675')  from dual";
    Response.Write(strpassword);

strpassword我得到了整个查询。

但在Toad中,结果为

  

F52377D5FFB1A47F

如何在oracle中获得它?

1 个答案:

答案 0 :(得分:3)

写作时

string strpassword = "select  sys.get_enc_val ('" + txtpassword.Text + "', 'F20FA982B4C2C675')  from dual";
Response.Write(strpassword);

然后您只是显示字符串值,因为您没有执行字符串中存在的SQL。

您要查找的是字符串中存在的SQL的结果。要获取存储在字符串中的SQL的结果,您需要执行它。

您可以尝试这样:

string queryString = "select  sys.get_enc_val ('" + txtpassword.Text + "', 'F20FA982B4C2C675')  from dual";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        connection.Open();
        SqlDataReader reader = command.ExecuteReader();
        try
        {
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}",reader[0]));
            }
        }
        finally
        {
            reader.Close();
        }
    }

如上所述,您的查询很容易SQL Injection。更好的方法是使用paramterized query来摆脱它。像

这样的东西
string sql = "select  sys.get_enc_val (@myvar) from dual";
SqlConnection connection = new SqlConnection(/* connection info */);
SqlCommand command = new SqlCommand(sql, connection);

command.Parameters.AddWithValue("myvar", txtpassword.Text);