【问题标题】:Assign query result to a variable and return variable将查询结果分配给变量并返回变量
【发布时间】:2022-01-06 14:28:01
【问题描述】:
private int getuserid(String username){
        
            SqlConnection con = new SqlConnection(_conString);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;

            cmd.CommandText = "SELECT USER_ID from tblUser where USERNAME ='" +username+"'";
            int locid = Convert.ToInt32(cmd.CommandText);

            return locid;
        }

大家好,您知道如何在变量中分配 user_id 的值并返回它。我试过了,但我不确定它好不好。

【问题讨论】:

  • 哎呀,这看起来很可怕——容易受到 sql 注入问题的影响。

标签: mysql asp.net sql-server database web


【解决方案1】:

您需要实际打开连接并运行命令。

您还应该采取措施防止 sql 注入并在发生异常时保持连接打开。这段代码解决了所有三个问题:

private int getuserid(String username)
{
    using (var con = new SqlConnection(_conString))
    using (var cmd = new SqlCommand("SELECT user_id FROM tblUser WHERE username = @username", con))
    {
        // Use actual column type and length from the database
        cmd.Parameters.Add("@username", SqlDbType.NVarChar, 30).Value = username;
        con.Open();
        return (int)cmd.ExecuteScalar();
    }
}

最后,如果您的WHERE 子句不匹配,您需要定义您想要发生的情况。现在会有一个例外,但问题中的原始代码也是如此,所以据我所知,这就是你真正想要做的。

【讨论】:

    【解决方案2】:
    try
    
    using (var conn = new SqlConnection(SomeConnectionString))
    using (var cmd = conn.CreateCommand())
    {
        conn.Open();
    
        cmd.CommandText = "SELECT USER_ID from tblUser where USERNAME =@username";
        cmd.Parameters.Add("@username", SqlDbType.NVarChar, 30).Value = username;
        using (var reader = cmd.ExecuteReader())
        {
            if (reader.Read())
            {
                int locaid = Convert.ToInt32(reader.GetOrdinal("USER_ID"));
            }
        }
    }
    

        int locaid = (int) cmd.ExecuteScalar();
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多